Development Tools

GNU make 4.3

GNU make 4.3 includes many bug fixes, new features and performance improvements.

Backward-incompatibility

Compatibility patches to make version 3.8 are removed in this release, making Fedora’s make the same as other distros.

Package owners relying on makefile features specific to older versions of GNU make (including compatibility patches for 3.8 we’re dropping) may FTBFS and need to tweak their Makefiles. Packages which were built previous to this upgrade will not be affected.

Specific backward incompatibility:

* WARNING: Backward-incompatibility!
  Number signs (#) appearing inside a macro reference or function invocation
  no longer introduce comments and should not be escaped with backslashes:
  thus a call such as:
    foo := $(shell echo '#')
  is legal.  Previously the number sign needed to be escaped, for example:
    foo := $(shell echo '\#')
  Now this latter will resolve to "\#".  If you want to write makefiles
  portable to both versions, assign the number sign to a variable:
    H := \#
    foo := $(shell echo '$H')
  This was claimed to be fixed in 3.81, but wasn't, for some reason.
  To detect this change search for 'nocomment' in the .FEATURES variable.

* WARNING: Backward-incompatibility!
  Previously appending using '+=' to an empty variable would result in a value
  starting with a space.  Now the initial space is only added if the variable
  already contains some value.  Similarly, appending an empty string does not
  add a trailing space.

New features

  • Grouped explicit targets Pattern rules have always had the ability to generate multiple targets with a single invocation of the recipe. It’s now possible to declare that an explicit rule generates multiple targets with a single invocation. To use this, replace the : token with &: in the rule. To detect this feature search for grouped-target in the .FEATURES special variable.

  • .EXTRA_PREREQS variable Words in this variable are considered prerequisites of targets but they are not added to any of the automatic variable values when expanding the recipe. This variable can either be global (applies to all targets) or a target-specific variable. To detect this feature search for extra-prereqs in the .FEATURES special variable.

  • Makefiles can now specify the -j option in their MAKEFLAGS variable and this will cause make to enable that parallelism mode.

  • GNU make will now use posix_spawn() on systems where it is available. If you prefer to use fork/exec even on systems where posix_spawn() is present, you can use the --disable-posix-spawn option to configure.

  • Error messages printed when invoking non-existent commands have been cleaned up and made consistent.

  • A new option --no-silent has been added, that cancels the effect of the -s/--silent/--quiet flag.

  • A new option -E has been added as a short alias for --eval.

  • Interoperate with newer GNU libc and musl C runtime libraries.

See the upstream release announcement for more detailed information about this release.

Bugs fixed

A complete list of bugs fixed in this version is available here make - Bugs