Unsupported GNU Make Options and Features

2 minute read

Unsupported GNU Make Options

OptioneMake response if specified

-d (debug)

Error message

-j (run parallel)

Ignored

-l (load limit)

Ignored

-o (old file)

Error message

-p (print database)

Error message

-q (question)

Error message

-t (touch)

Error message

GNU Make 3.81 Support

eMake does not support the following GNU Make 3.81 features:

  • Though $(eval) is allowed in rule bodies, any variables created by the $(eval) exist only in the scope of the rule being processed, not at the global scope as in GNU Make. For example, the following is not supported:

all:
    $(eval foo: bar)
  • Using $* for an archive member target

  • If an -include directive references a target that has nonexistent prerequisites, as long as that target is not a goal, eMake will succeed. If it is a goal, eMake will fail with the appropriate error

GNU Make 3.82 Support

GNU Make 3.82 emulation supports the following GNU Make 3.82 features:

  • Multi-line variable definition types

  • Behavior in which pattern rule searches prefer the most-specific matching pattern rather than the first matching pattern. For example, for a target {{foo.o}} and patterns {{%.o}} and {{f%.o}}, in that order, gmake 3.81 uses the {{%.o}} pattern, because it is the first match, but gmake 3.82 uses the {{f%.o}} pattern, because it is a more specific match

  • If an -include directive references a target that has nonexistent prerequisites, as long as that target is not a goal, eMake will succeed. If it is a goal, eMake will fail with the appropriate error

Other GNU Make 3.82 features are not supported.

GNU Make 4.0 and 4.1 Support

GNU Make 4.0 and 4.1 emulation supports the following GNU Make 4.0 and 4.1 features:

  • GNU Make 4.0 shell assignment, where VAR!=<command> is equivalent to VAR:=$(<shell command>)

  • $(file …​) function for reading, writing, and appending

  • If an -include directive references a target that has nonexistent prerequisites, as long as that target is not a goal, eMake will succeed. If it is a goal, eMake will fail with the appropriate error

Other GNU Make 4.0 and 4.1 features are not supported.

GNU Make 4.2 Support

GNU Make 4.2 emulation supports the following GNU Make 4.2 features:

  • $(.SHELLSTATUS) variable. This variable is set to the exit status of the last != or $(shell …​) function invoked in this instance of Make. The value is 0 if successful or > 0 if not successful. The value is unset if the != or $(shell …​) function was not invoked

  • $(file …​​) function for reading, writing, and appending

  • If an -include directive references a target that has nonexistent prerequisites, as long as that target is not a goal, eMake will succeed. If it is a goal, eMake will fail with the appropriate error

Other GNU Make 4.2 features are not supported.