问题
Is there a way that I can make
$ make
default to:
$ make -j 8
?
回答1:
alias make="make -j 8", assuming bash shell
回答2:
Set the environment variable MAKEFLAGS to -j 8. If you are using csh or tcsh, you can do this with setenv MAKEFLAGS '-j 8'. If you are using bash, you can do this with export MAKEFLAGS='-j 8'. You might wish to put this command in your shell's start-up file, such as .cshrc or .bashrc (in your home directory).
Caution: Setting a default like this will apply to all invocations of make, including when you "make" a project other than your own or run a script that invokes make. If the project was not well designed, it might have problems when it is built with multiple jobs executing in parallel.
回答3:
The answers suggesting alias make='make -j 8' are fine responses to your question.
However, I would recommend against doing that!
By all means, use an alias to save typing - but call it something other than make.
It might be OK for whatever project you're currently working on; but it's quite possible to write makefiles with missing dependencies which do not quite work properly with -j, and if you encounter such a thing, you'll be left wondering why the build fails in a mysterious way for you but works fine for other people.
(That said, if you do alias make, you can get bash to ignore the alias by typing \make.)
回答4:
If you are using the command line you can do:
alias make='make -j 8'
This will be temporary, to make it permanent you need to add it to .bashrc
Read here: http://www.linfo.org/make_alias_permanent.html
回答5:
Add
MAKEOPTS='-j8'
MAKEFLAGS='-j8'
to /etc/make.conf (create it if it doesn't already exist).
If that doesn't work, add
export MAKEOPTS='-j8'
export MAKEFLAGS='-j8'
to your system-wide profile (e.g., /etc/profile).
For me, MAKEOPTS alone didn't work. Possibly MAKEFLAGS is all that's needed.
回答6:
Why not create an outer makefile, that calls another makefile like this, this is replicated from the manual here.
SUBDIRS = foo bar baz
.PHONY: subdirs $(SUBDIRS)
subdirs: $(SUBDIRS)
$(SUBDIRS):
$(MAKE) -j 8 -C $@
foo: baz
回答7:
If you're using GNU make:
$ make --version
GNU Make 4.2.1
Built for x86_64-alpine-linux-musl
...then I found that GNUMAKEFLAGS seems to work:
export GNUMAKEFLAGS=-j8
make
Disclaimer, I'm a n00b with the C toolchain so sorry if this isn't portable. It's working on Alpine Linux 3.8 (in Docker) though.
回答8:
You could move /usr/bin/make to /usr/bin/make_orig and make /usr/bin/make this script:
#!/bin/sh
/usr/bin/make_orig -j 8 $@
Be sure to run chmod +x /usr/bin/make.
Try this method if the simpler method in my other answer doesn't work. This method isn't as safe and is a bit of a kludge.
来源:https://stackoverflow.com/questions/2151605/make-make-default-to-make-j-8