GNU Make

Release date: 
Monday, 23 March, 1992




GNU Make is a tool which controls the generation of executables and other non-source files of a program from the program's source files. Make gets its knowledge of how to build your program from a file called the makefile, which lists each of the non-source files and how to compute it from other files. When you write a program, you should write a makefile for it, so that it is possible to use Make to build and install the program.

This software is distributed as compressed package. You have to download and manually install it; if prerequisites are required, you will have to manually install them too.

Manual installation

Program is distributed as ZIP package: download to temporary directory and unpack to destination folder. See below for download link(s).

You can install the prerequisites with rpm running the following string in a command line:

yum install libc libcx libgcc1 libssp libstdc++6 libstdc++ libsupc++6 libsupc++ libgcc-fwd emxrt

Online documentation:

Following ones are the download links for manual installation:

GNU Make v. 4.4.1 (Release 2, 15/6/2024) Readme/What's new
v4.4.1-r2: * Built with gcc v12.3.0 * Fixed jobserver did not work. Reported by Elbert Pol
GNU Make v. 4.4.1 (8/10/2023, KO Myung-Hun) Readme/What's new
Port of GNU Make to OS/2. Features of GNU Make that do not work under OS/2: - remote job execution - dynamic load balancing Special features of the OS/2 version: Due to the fact that some people might want to use sh syntax in Makefiles while others might want to use OS/2's native shell cmd.exe, GNU Make supports both shell types. The following list defines the order that is used to determine the shell: 1. The shell specified by the environment variable MAKESHELL. 2. The shell specified by the SHELL variable within a Makefile. Like Unix, SHELL is NOT taken from the environment. 3. The shell specified by the COMSPEC environment variable. 4. The shell specified by the OS2_SHELL environment variable. 5. If none of the above is defined /bin/sh is used as default. This happens e.g. in the make testsuite. Note: - Points 3 and 4 can be turned off at compile time by adding -DNO_CMD_DEFAULT to the CPPFLAGS. - DOS support is not tested for EMX and therefore might not work. - The UNIXROOT environment variable is supported to find /bin/sh if it is not on the current drive. COMPILATION OF GNU MAKE FOR OS/2: I. ***** SPECIAL OPTIONS ***** - At compile time you can turn off that cmd is used as default shell (but only /bin/sh). Simply set CPPFLAGS="-DNO_CMD_DEFAULT" and make will not use cmd unless you cause it to do so by setting MAKESHELL to cmd or by specifying SHELL=cmd in your Makefile. - At compile time you can set CPPFLAGS="-DNO_CHDIR2" to turn off that GNU Make prints drive letters. This is necessary if you want to run the testsuite. II. ***** REQUIREMENTS FOR THE COMPILATION ***** A standard Unix like build environment: - sh compatible shell (ksh, bash, ash, but tested only with pdksh 5.2.14 release 2) If you use pdksh it is recommended to update to 5.2.14 release 2. Older versions may not work! You can get this version at - GNU file utilities (make sure that install.exe from the file utilities is in front of your PATH before X:\OS2\INSTALL\INSTALL.EXE. I recommend also to change the filename to ginstall.exe instead of install.exe to avoid confusion with X:\OS2\INSTALL\INSTALL.EXE) - GNU shell utilities - GNU text utilities - gawk - grep - sed - GNU Make 3.79.1 (special OS/2 patched version) or higher - perl 5.005 or higher - GNU texinfo (you can use 3.1 (, but I recommend 4.0) If you want to recreate the configuration files (developers only!) you need also: GNU m4 1.4, autoconf 2.59, automake 1.9.6 (or compatible) III. ***** COMPILATION AND INSTALLATION ***** a) ** Developers only - Everyone else should skip this section ** To recreate the configuration files use: export EMXSHELL=ksh aclocal -I m4 automake autoconf autoheader b) Installation into x:/usr Note: Although it is possible to compile make using "./configure", "make", "make install" this is not recommended. In particular, you must ALWAYS use LDFLAGS="-Zstack 0x6000" because the default stack size is far to small and make will not work properly! Recommended environment variables and installation options: export ac_executable_extensions=".exe" export CPPFLAGS="-D__ST_MT_ERRNO__" export CFLAGS="-O2 -Zomf -Zmt" export LDFLAGS="-Zcrtdll -Zlinker /exepack:2 -Zlinker /pm:vio -Zstack 0x6000" export RANLIB="echo" ./configure --prefix=x:/usr --infodir=x:/usr/share/info --mandir=x:/usr/share/man make AR=emxomfar make install Note: If you use gcc 2.9.x I recommend to set also LIBS="-lgcc" Note: You can add -DNO_CMD_DEFAULT and -DNO_CHDIR2 to CPPFLAGS. See section I. for details. Note: If you use Open Watcom Linker instead of IBM Linker, remove '-Zlinker /exepack:2' from LDFLAGS. IV. ***** NLS support ***** GNU Make has NLS (National Language Support), with the following caveats: a) It will only work with GNU gettext, and b) GNU gettext support is not included in the GNU Make package. Therefore, if you wish to enable the internationalization features of GNU Make you must install GNU gettext on your system before configuring GNU Make. You can choose the languages to be installed. To install support for English, German and French only enter: export LINGUAS="en de fr" If you don't specify LINGUAS all languages are installed. If you don't want NLS support (English only) use the option --disable-nls for the configure script. Note if GNU gettext is not installed then NLS will not be enabled regardless of this flag. V. ***** Running the make test suite ***** To run the included make test suite you have to set CPPFLAGS="-D__ST_MT_ERRNO__ -DNO_CMD_DEFAULT -DNO_CHDIR2" before you compile make. This is due to some restrictions of the testsuite itself. -DNO_CMD_DEFAULT causes make to use /bin/sh as default shell in every case. Normally you could simply set MAKESHELL="/bin/sh" to do this but the testsuite ignores the environment. -DNO_CHDIR2 causes make not to use drive letters for directory names (i.e. _chdir2() and _getcwd2() are NOT used). The testsuite interprets the whole output of make, especially statements like make[1]: Entering directory 'C:/somewhere/make-3.79.1/tests' where the testsuite does not expect the drive letter. This would be interpreted as an error even if there is none. To run the testsuite do the following: export CPPFLAGS="-D__ST_MT_ERRNO__ -DNO_CMD_DEFAULT -DNO_CHDIR2" export CFLAGS="-Zomf -O2 -Zmt" export LDFLAGS="-Zcrtdll -s -Zlinker /exepack:2 -Zlinker /pm:vio -Zstack 0x6000" export RANLIB="echo" ./configure --prefix=x:/usr --disable-nls make AR=emxomfar make check All tests should work fine with the exception of one of the "INCLUDE_DIRS" tests which will fail if your /usr/include directory is on a drive different from the make source tree. ------------------------------------------------------------------------------- Copyright (C) 2003-2023 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 <>.
GNU Make v. 3.81-k2 (12/11/2017, KO Myung-Hun) Readme/What's new
v3.81-k2: * Fixed the regression of .exe check which is that the search result of VPATH is not applied in some cases. * Improved a very long command line pass
GNU Make v. 3.81-k1 (23/1/2017, KO Myung-Hun) Readme/What's new
v3.81-k1: * Based on v3.81-r3 of Andreas Buening * Pass a very long command line via a response file * Check target.exe as well when target does not exist. For example, foo: foo.c gcc $@ $< foo.exe is checked as well unless foo exists. * See README.OS2 for explanations of Andreas Buening
GNU Make v. 3.81r3 (28/9/2009, Andreas Buening)
GNU Make v. 3.81r3 (static, 28/9/2009, Andreas Buening)
GNU Make v. 3.81r3 (patch to sources, 28/9/2009, Andreas Buening)
GNU Make v. 3.81r2 (30/5/2006, Andreas Buening)
GNU Make v. 3.81r2 (source code, 30/5/2006, Andreas Buening)
GNU Make v. 3.81 beta3 (8/8/2005, Andreas Buening)
GNU Make v. 3.81 beta3 (source code, 8/8/2005, Andreas Buening)
GNU Make v. 3.79.2a1 (source code, 23/8/2003, Andreas Buening)
GNU Make v. 3.79.2a1 (23/8/2002, Andreas Buening)
GNU Make v. 3.79.1 (Andreas Buening, 11/6/2002)
GNU Make v. 3.79.1 (Andreas Buening, 11/6/2002)
GNU Make v. 3.76.1 (13/8/2001, Andreas Buening) Readme/What's new
special patch (source and binary)
GNU Make v. 3.62 (23/3/1992, galen c. hunt) Readme/What's new
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= README Release 1 =-=-=-=-=-=-=-=-=-=-=-=-=-=-= This distribution contains release 2 of a copy of the 3.62 test release of GNU Make which has been modified to run under the emx 32-bit environment under MS-DOS or OS/2 2.0. (See the README.GNU file in either of the zoo files for more information about GNU Make.) GNU Make is free software. See the file COPYING for copying conditions. This program is provided with absolutely NO WARRANTY of any kind. The documentation for GNU make is provided in the from of .info files which have been created from the .texinfo files supplied in the original GNU release. To browse these files you will need a copy of GNU info which is probably available from the same source where you obtained this file. The documentation is compressed in the info.zoo file. The source code for this port of GNU make is also included in the source.zoo file. In porting GNU make I have taken a mostly slash and burn approach. GNU Make relies very heavily on the un*x fork function which is resource intensive. I have made massive changes in the job.c file so that this release does not use the fork function. This makes for a smaller executable and hopefully a program which is a little more robust in the emx environment. I have also changed the handling of commands within make. To illustrate the changes, imaging that make wants to issue a command: gcc -c test.c First, it examines the command name (in this case "gcc"). If the name ends with a .bat, .cmd, or .com extension, make uses the emx system() function to ask either or cmd.exe to execute the command. If the name does not end with a .bat, .cmd, or .com extension, make adds a ".exe" extension and looks for the command using the PATH environment variable. If it finds the command, it executes it directly via a spawnve() function call without loading or cmd.exe. If the command contains any pipes (|) or output or input re-routing (<, >>, >) the system() function will be used to make sure that the operating system is allowed to handle these functions. This is done mostly to circumvent weaknesses in the emx environment under MS-DOS. Notably, when forced to use the system() function to under MS-DOS, make is unable to obtain the return code from the command and instead must assume that the command was completed successfully. Also, If a command line is more than ~100 characters long, this port of make will create a temporary response file and call the command with the response file, thus, creating a shorter command line. This could cause trouble if you try to call a program which does not understand how to handle response files with a large command line. I will gladly accept any question, comments, or insults for poor porting. Send email to: Or, to the emx-list mailing list: To subscribe to the emx-list mailing list, send email to: galen c. hunt 23/March/92  local copy
Record updated last time on: 18/06/2024 - 06:39

Translate to...

Add new comment