Make “make” default to “make -j 8”

允我心安 提交于 2019-11-29 02:32:43

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!