make(1) on Solnix vs Linux and the BSDs
The published Solnix make(1) page is GNU Make (pkgs.solnix.gnumake), but the make on PATH by default is the illumos /usr/bin/make. Its options differ from GNU make and from the BSD makes: -d, -D, -m and -V do not behave as they do elsewhere.
The manual pages
What Solnix runs
A default Solnix system runs the illumos make at /usr/bin/make. The illumos page also documents /usr/bin/dmake and /usr/xpg4/bin/make. The published page is GNU Make from pkgs.solnix.gnumake, which is the same program as Linux make, so install that package to get the GNU options. The bundle does not say what name its binary is installed under. The illumos text in the bundle is truncated, so options such as -V, -P, -w and -S are not fully described here.
Differences
| Compared with | Topic | What differs |
|---|---|---|
| Linux | which make you get | The Solnix page describes GNU Make, but the default /usr/bin/make is the illumos make. A Linux Makefile or command line using GNU long options (--jobs, --directory, --dry-run) or -E, -I, -O, -L, -R, -B will not work with it. The illumos synopsis shows none of those.Source: Solnix header (command on PATH is illumos /usr/bin/make); Solnix gnumake make(1) OPTIONS; illumos make(1) SYNOPSIS |
| all four | -d meaning | illumos make -d takes no argument. It shows why a target is rebuilt, plus options read from MAKEFLAGS, and -dd gives full detail. GNU -d prints debugging information (--debug[=FLAGS] selects types). FreeBSD, OpenBSD and NetBSD -d takes a flags string such as A, m or g1.Source: illumos make(1) -d, -dd; Linux make(1) -d, --debug; FreeBSD make(1) -d; OpenBSD make(1) -d; NetBSD make(1) -d |
| all four | -D meaning | illumos -D displays the text of the makefiles read, and -DD adds the make.rules file, the state file and hidden-dependency reports. On FreeBSD, OpenBSD and NetBSD, -D variable defines the variable as 1. The GNU option list has no -D.Source: illumos make(1) -D, -DD; FreeBSD make(1) -D; OpenBSD make(1) -D; NetBSD make(1) -D; Linux make(1) OPTIONS |
| all four | -m meaning | illumos -m takes serial or parallel. GNU make ignores -m (and -b) for compatibility. On FreeBSD, OpenBSD and NetBSD, -m directory sets the system makefile search directory. Passing a BSD-style -m directory to illumos make is a syntax mismatch.Source: illumos make(1) SYNOPSIS (-m {serial | parallel}); Linux make(1) -b, -m; FreeBSD make(1) SYNOPSIS (-m directory); OpenBSD make(1) -m |
| all four | -j and -l | illumos -j maxjobs always takes a number. GNU -j without an argument sets no limit on jobs, and GNU adds -l for a load-average limit. FreeBSD, OpenBSD and NetBSD take -j max_jobs. The FreeBSD and NetBSD synopses show no -l.Source: illumos make(1) -j; Linux make(1) -j, -l; FreeBSD make(1) SYNOPSIS (-j max_jobs); OpenBSD make(1) -j; NetBSD make(1) SYNOPSIS |
| all four | default makefile names | illumos /usr/bin/make tries makefile, then Makefile, and fetches a newer SCCS history file if one exists. In POSIX mode and in /usr/xpg4/bin/make it tries ./makefile, ./Makefile, then s.makefile and SCCS/s.makefile. GNU also tries GNUmakefile first. FreeBSD and NetBSD use .MAKE.MAKEFILE_PREFERENCE (default makefile, Makefile).Source: illumos make(1) -f; Linux make(1) DESCRIPTION; FreeBSD make(1) DESCRIPTION; NetBSD make(1) DESCRIPTION; OpenBSD make(1) DESCRIPTION |
| all four | state file and command tracking | illumos make has -K statefile and can treat a target as out of date when the commands that built it have changed. The bundled GNU, FreeBSD, OpenBSD and NetBSD texts show no -K option or equivalent in these excerpts.Source: illumos make(1) SYNOPSIS (-K statefile), DESCRIPTION; Linux, FreeBSD, OpenBSD and NetBSD make(1) OPTIONS |
| all four | -C in xpg4 make | /usr/xpg4/bin/make has no -C option in its synopsis, while /usr/bin/make, GNU make and all three BSD makes accept -C directory. A script using -C needs to avoid the xpg4 variant.Source: illumos make(1) SYNOPSIS (/usr/xpg4/bin/make vs /usr/bin/make); Linux make(1) -C; FreeBSD make(1) -C; OpenBSD make(1) -C; NetBSD make(1) -C |
| Linux, FreeBSD, NetBSD | -v meaning | GNU -v prints the version. The FreeBSD and NetBSD synopses show -v variable, which takes an argument. The illumos synopsis has no -v; it has -V. The page excerpt for illumos -V is truncated here.Source: Linux make(1) -v, --version; FreeBSD make(1) SYNOPSIS (-v variable); NetBSD make(1) SYNOPSIS; illumos make(1) SYNOPSIS (-V) |
| OpenBSD | -p meaning | OpenBSD -p dumps rules and variables and builds nothing. GNU -p prints its database and then executes as usual; to avoid building use make -p -f/dev/null. The illumos -p text is not in the bundle excerpt.Source: OpenBSD make(1) -p; Linux make(1) -p, --print-data-base; illumos make(1) SYNOPSIS (-p) |
| FreeBSD, OpenBSD, NetBSD | system rules location | illumos reads standard suffix rules from /usr/share/lib/make/make.rules and can retrieve files from SCCS. OpenBSD takes built-in rules from sys.mk, with the default system include directory /usr/share/mk.Source: illumos make(1) DESCRIPTION; OpenBSD make(1) -r, -m |
Standards
- POSIX: make is a POSIX.1-2024 utility.
- Solnix: The Solnix bundle states no STANDARDS section for either the published GNU page or the illumos page, only
/usr/xpg4/bin/makeand a POSIX mode (.POSIX) in the illumos text.
Writing portable scripts
- Stick to
-f,-e,-i,-k,-n,-q,-r,-s,-tand macro=value on the command line. These appear in all the bundled synopses. - Do not rely on
-d,-D,-m,-p,-vor-V. They mean different things or are missing on illumos make, GNU make and the BSD makes. Name the makefile Makefile, not GNUmakefile, unless it needs GNU make.
Every difference here is taken from the manual pages linked above: Solnix's published page, Linux (man-pages and the GNU and util-linux manuals), FreeBSD, OpenBSD and NetBSD. Each row names its source. Where a manual is silent, this page is too. Compiled 2026-10-26. Found a mistake? Mail hackers@lists.solnix.io.