| This version of GNU make has been tested on: | |
| Microsoft Windows 2000/XP/2003/Vista/7/8/10 | |
| It has also been used on Windows 95/98/NT, and on OS/2. | |
| It builds with the MinGW port of GCC (tested with GCC 3.4.2, 4.8.1, | |
| and 4.9.3). | |
| It also builds with MSVC 2.x, 4.x, 5.x, 6.x, 2005, 2008, 2010, 2012, | |
| 2013, and 2015 as well as with .NET 7.x and .NET 2003. | |
| Building with Guile is supported (tested with Guile 2.0.x). To build | |
| with Guile, you will need, in addition to Guile itself, its dependency | |
| libraries and the pkg-config program. The latter is used to figure out | |
| which compilation and link switches and libraries need to be mentioned | |
| on the compiler command lines to correctly link with Guile. A Windows | |
| port of pkg-config can be found on ezwinports site: | |
| http://sourceforge.net/projects/ezwinports/ | |
| The libraries on which Guile depends can vary depending on your | |
| version and build of Guile. At the very least, the Boehm's GC library | |
| will be needed, and typically also GNU MP, libffi, libunistring, and | |
| libtool's libltdl. Whoever built the port of Guile you have should | |
| also provide you with these dependencies or a URL where to download | |
| them. A precompiled 32-bit Windows build of Guile is available from | |
| the ezwinports site mentioned above. | |
| The Windows port of GNU make is maintained jointly by various people. | |
| It was originally made by Rob Tulloh. | |
| It is currently maintained by Eli Zaretskii. | |
| Do this first, regardless of the build method you choose: | |
| --------------------------------------------------------- | |
| 1. Edit config.h.W32 to your liking (especially the few shell-related | |
| defines near the end, or HAVE_CASE_INSENSITIVE_FS which corresponds | |
| to './configure --enable-case-insensitive-file-system'). (We don't | |
| recommend to define HAVE_CASE_INSENSITIVE_FS, but you may wish to | |
| consider that if you have a lot of files whose names are in upper | |
| case, while Makefile rules are written for lower-case versions.) | |
| Building with (MinGW-)GCC using build_w32.bat | |
| --------------------------------------------- | |
| 2. Open a W32 command prompt for your installed (MinGW-)GCC, setup a | |
| correct PATH and other environment variables for it, then execute ... | |
| .\build_w32.bat gcc | |
| This produces gnumake.exe in the GccRel directory. | |
| If you want a version of GNU make built with debugging enabled, | |
| add the --debug option. Output goes into the GccDebug directory. | |
| The batch file will probe for Guile installation, and will build | |
| gnumake.exe with Guile if it finds it. If you have Guile | |
| installed, but want to build Make without Guile support, type | |
| .\build_w32.bat --without-guile gcc | |
| Building with (MSVC++-)cl using build_w32.bat | |
| --------------------------------------------- | |
| 2. Open a command shell, then execute ... | |
| .\build_w32.bat | |
| This produces a 64bit Release build of gnumake.exe in .\WinRel, using | |
| the compiler found on the %Path%. If no compiler is found, the batch | |
| file will probe your system and choose the newest MSVC version it can | |
| find. | |
| If you want a 32bit version of GNU make, add the --x86 option. | |
| If you want a Debug build of GNU make, add the --debug option. Output | |
| will go into the .\WinDebug directory. | |
| The batch file will probe for Guile installation, and will build | |
| gnumake.exe with Guile if it finds it. If Guile is installed, | |
| but you prefer to build GNU make without Guile support, add the | |
| --without-guile option. | |
| Building with (MinGW-)GCC using GNU make | |
| ---------------------------------------- | |
| 2. If you already have a version of GNU make available you can use it | |
| to build this version. Open a W32 command prompt for your installed | |
| (MinGW-)GCC, setup a correct PATH and other environment variables | |
| for it, then execute ... | |
| make -f Basic.mk TOOLCHAIN=gcc | |
| This produces GccRel\gnumake.exe. | |
| If you want a version of GNU make built with debugging enabled, | |
| add the TARGET_TYPE=debug option: | |
| make -f Basic.mk TOOLCHAIN=gcc TARGET_TYPE=debug | |
| The makefile doesn't support Guile integration. Use build_w32.bat | |
| if you want to build with Guile support. | |
| Building with (MSVC++-)cl using GNU make | |
| ---------------------------------------- | |
| 2. If you already have a version of GNU make available you can use it | |
| to build this version. Open a W32 command prompt for your installed | |
| (MSVC++-)cl, setup a correct PATH and other environment variables | |
| for it (usually via executing vcvars32.bat or vsvars32.bat from the | |
| cl-installation, or using a corresponding start menu entry from the | |
| cl-installation), then execute ... | |
| make -f Basic.mk | |
| This produces an optimized WinRel/gnumake.exe. | |
| If you want a version of GNU make built with debugging enabled, | |
| add the TARGET_TYPE=debug option: | |
| make -f Basic.mk TARGET_TYPE=debug | |
| The makefile doesn't support Guile integration. Use build_w32.bat | |
| if you want to build with Guile support. | |
| Running the test suite | |
| ---------------------- | |
| 3. You will need an installation of Perl. Be sure to use a relatively | |
| modern version: older versions will sometimes throw spurious errors. | |
| To run the suite after building using GNU make, use: | |
| make -f Basic.mk check | |
| Alternatively if you'd like to run tests by hand, use: | |
| cd tests | |
| .\run_make_tests.bat -make <path-to-make> | |
| I've found <path-to-make> seems to want forward-slashes in the path. | |
| For example if building with .\build_w32.bat non-debug, use: | |
| cd tests | |
| .\run_make_tests.bat -make ../WinRel/gnumake.exe | |
| I've tested this with the MSYS2 shell and POSIX tools installation | |
| that you get by installing Git for Windows. | |
| ------------------- | |
| -- Notes/Caveats -- | |
| ------------------- | |
| GNU make on Windows 32-bit platforms: | |
| This version of make is ported natively to Windows32 platforms | |
| (Windows NT 3.51, Windows NT 4.0, Windows 2000, Windows XP, | |
| Windows 95, and Windows 98). It does not rely on any 3rd party | |
| software or add-on packages for building. The only thing | |
| needed is a Windows compiler. Two compilers supported | |
| officially are the MinGW port of GNU GCC, and the various | |
| versions of the Microsoft C compiler. | |
| Do not confuse this port of GNU make with other Windows32 projects | |
| which provide a GNU make binary. These are separate projects | |
| and are not connected to this port effort. | |
| GNU make and sh.exe: | |
| This port prefers if you have a working sh.exe somewhere on | |
| your system. If you don't have sh.exe, the port falls back to | |
| MSDOS mode for launching programs (via a batch file). The | |
| MSDOS mode style execution has not been tested that carefully | |
| though (The author uses GNU bash as sh.exe). | |
| There are very few true ports of Bourne shell for NT right now. | |
| There is a version of GNU bash available from Cygnus "Cygwin" | |
| porting effort (http://www.cygwin.com/). | |
| Other possibilities are the MKS version of sh.exe, or building | |
| your own with a package like NutCracker (DataFocus) or Portage | |
| (Consensys). Also MinGW includes sh (http://mingw.org/). | |
| GNU make and brain-dead shells (BATCH_MODE_ONLY_SHELL): | |
| Some versions of Bourne shell do not behave well when invoked | |
| as 'sh -c' from CreateProcess(). The main problem is they seem | |
| to have a hard time handling quoted strings correctly. This can | |
| be circumvented by writing commands to be executed to a batch | |
| file and then executing the command by calling 'sh file'. | |
| To work around this difficulty, this version of make supports | |
| a batch mode. When BATCH_MODE_ONLY_SHELL is defined at compile | |
| time, make forces all command lines to be executed via script | |
| files instead of by command line. In this mode you must have a | |
| working sh.exe in order to use parallel builds (-j). | |
| A native Windows32 system with no Bourne shell will also run | |
| in batch mode. All command lines will be put into batch files | |
| and executed via $(COMSPEC) (%COMSPEC%). However, parallel | |
| builds ARE supported with Windows shells (cmd.exe and | |
| command.com). See the next section about some peculiarities | |
| of parallel builds on Windows. | |
| Support for parallel builds | |
| Parallel builds (-jN) are supported in this port. The number of | |
| concurrent processes has a hard limit of 4095. | |
| GNU make and Cygnus GNU Windows32 tools: | |
| Good news! Make now has native support for Cygwin sh. To enable, | |
| define the HAVE_CYGWIN_SHELL in config.h and rebuild make | |
| from scratch. This version of make tested with B20.1 of Cygwin. | |
| Do not define BATCH_MODE_ONLY_SHELL if you use HAVE_CYGWIN_SHELL. | |
| GNU make and the MKS shell: | |
| There is now semi-official support for the MKS shell. To turn this | |
| support on, define HAVE_MKS_SHELL in the config.h.W32 before you | |
| build make. Do not define BATCH_MODE_ONLY_SHELL if you turn | |
| on HAVE_MKS_SHELL. | |
| GNU make handling of drive letters in pathnames (PATH, vpath, VPATH): | |
| There is a caveat that should be noted with respect to handling | |
| single character pathnames on Windows systems. When colon is | |
| used in PATH variables, make tries to be smart about knowing when | |
| you are using colon as a separator versus colon as a drive | |
| letter. Unfortunately, something as simple as the string 'x:/' | |
| could be interpreted 2 ways: (x and /) or (x:/). | |
| Make chooses to interpret a letter plus colon (e.g. x:/) as a | |
| drive letter pathname. If it is necessary to use single | |
| character directories in paths (VPATH, vpath, Path, PATH), the | |
| user must do one of two things: | |
| a. Use semicolon as the separator to disambiguate colon. For | |
| example use 'x;/' if you want to say 'x' and '/' are | |
| separate components. | |
| b. Qualify the directory name so that there is more than | |
| one character in the path(s) used. For example, none | |
| of these settings are ambiguous: | |
| ./x:./y | |
| /some/path/x:/some/path/y | |
| x:/some/path/x:x:/some/path/y | |
| Please note that you are free to mix colon and semi-colon in the | |
| specification of paths. Make is able to figure out the intended | |
| result and convert the paths internally to the format needed | |
| when interacting with the operating system, providing the path | |
| is not within quotes, e.g. "x:/test/test.c". | |
| You are encouraged to use colon as the separator character. | |
| This should ease the pain of deciding how to handle various path | |
| problems which exist between platforms. If colon is used on | |
| both Unix and Windows systems, then no ifdef'ing will be | |
| necessary in the makefile source. | |
| Pathnames and white space: | |
| Unlike Unix, Windows 95/NT systems encourage pathnames which | |
| contain white space (e.g. C:\Program Files\). These sorts of | |
| pathnames are valid on Unix too, but are never encouraged. | |
| There is at least one place in make (VPATH/vpath handling) where | |
| paths containing white space will simply not work. There may be | |
| others too. I chose to not try and port make in such a way so | |
| that these sorts of paths could be handled. I offer these | |
| suggestions as workarounds: | |
| 1. Use 8.3 notation. i.e. "x:/long~1/", which is actually | |
| "x:\longpathtest". Type "dir /x" to view these filenames | |
| within the cmd.exe shell. | |
| 2. Rename the directory so it does not contain white space. | |
| If you are unhappy with this choice, this is free software | |
| and you are free to take a crack at making this work. The code | |
| in w32/pathstuff.c and vpath.c would be the places to start. | |
| Pathnames and Case insensitivity: | |
| Unlike Unix, Windows 95/NT systems are case insensitive but case | |
| preserving. For example if you tell the file system to create a | |
| file named "Target", it will preserve the case. Subsequent access to | |
| the file with other case permutations will succeed (i.e. opening a | |
| file named "target" or "TARGET" will open the file "Target"). | |
| By default, GNU make retains its case sensitivity when comparing | |
| target names and existing files or directories. It can be | |
| configured, however, into a case preserving and case insensitive | |
| mode by adding a define for HAVE_CASE_INSENSITIVE_FS to | |
| config.h.W32. | |
| For example, the following makefile will create a file named | |
| Target in the directory subdir which will subsequently be used | |
| to satisfy the dependency of SUBDIR/DepTarget on SubDir/TARGET. | |
| Without HAVE_CASE_INSENSITIVE_FS configured, the dependency link | |
| will not be made: | |
| subdir/Target: | |
| touch $@ | |
| SUBDIR/DepTarget: SubDir/TARGET | |
| cp $^ $@ | |
| Reliance on this behavior also eliminates the ability of GNU make | |
| to use case in comparison of matching rules. For example, it is | |
| not possible to set up a C++ rule using %.C that is different | |
| than a C rule using %.c. GNU make will consider these to be the | |
| same rule and will issue a warning. | |
| SAMBA/NTFS/VFAT: | |
| I have not had any success building the debug version of this | |
| package using SAMBA as my file server. The reason seems to be | |
| related to the way VC++ 4.0 changes the case name of the pdb | |
| filename it is passed on the command line. It seems to change | |
| the name always to to lower case. I contend that the VC++ | |
| compiler should not change the casename of files that are passed | |
| as arguments on the command line. I don't think this was a | |
| problem in MSVC 2.x, but I know it is a problem in MSVC 4.x. | |
| The package builds fine on VFAT and NTFS filesystems. | |
| Most all of the development I have done to date has been using | |
| NTFS and long file names. I have not done any considerable work | |
| under VFAT. VFAT users may wish to be aware that this port of | |
| make does respect case sensitivity. | |
| FAT: | |
| Version 3.76 added support for FAT filesystems. Make works | |
| around some difficulties with stat'ing of files and caching of | |
| filenames and directories internally. | |
| Bug reports: | |
| Please submit bugs via the normal bug reporting mechanism which | |
| is described in the GNU make manual and the base README. | |
| ------------------------------------------------------------------------------- | |
| Copyright (C) 1996-2022 Free Software Foundation, Inc. | |
| This file is part of GNU Make. | |
| GNU Make is free software; you can redistribute it and/or modify it under the | |
| terms of the GNU General Public License as published by the Free Software | |
| Foundation; either version 3 of the License, or (at your option) any later | |
| version. | |
| GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY | |
| WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR | |
| A PARTICULAR PURPOSE. See the GNU General Public License for more details. | |
| You should have received a copy of the GNU General Public License along with | |
| this program. If not, see <http://www.gnu.org/licenses/>. |