将“make”默认为“make -j 8”

时间:2010-01-28 01:05:09

标签: makefile alias bash

我有办法吗

$ make

默认为:

$ make -j 8

8 个答案:

答案 0 :(得分:59)

将环境变量MAKEFLAGS设置为-j 8。如果您使用的是csh或tcsh,则可以使用setenv MAKEFLAGS '-j 8'执行此操作。如果您使用的是bash,则可以使用export MAKEFLAGS='-j 8'执行此操作。您可能希望将此命令放在shell的启动文件中,例如.cshrc或.bashrc(在您的主目录中)。

警告:设置这样的默认值将适用于make的所有调用,包括当您“创建”非自己的项目或运行调用make的脚本时。如果项目设计不合理,那么在构建多个并行执行的作业时可能会遇到问题。

答案 1 :(得分:11)

alias make="make -j 8",假设bash shell

答案 2 :(得分:10)

建议alias make='make -j 8'的答案可以很好地回答您的问题。

但是,我建议不要这样做!

无论如何,请使用别名来保存输入 - 但要将其称为make以外的其他内容。

对于您目前正在进行的任何项目,这可能没问题;但很有可能编写缺少依赖关系的makefile,而这些依赖关系与-j无法正常工作,如果你遇到这样的事情,你会想知道为什么构建以一种神秘的方式失败但是工作正常对于其他人。

(也就是说,如果你别名make,你可以通过输入\make让bash忽略别名。)

答案 3 :(得分:5)

如果您使用的是命令行,则可以执行以下操作:

alias make='make -j 8'

这将是暂时的,为了使其成为永久性的,您需要将其添加到.bashrc

请在此处阅读:http://www.linfo.org/make_alias_permanent.html

答案 4 :(得分:3)

添加

MAKEOPTS='-j8'
MAKEFLAGS='-j8'

/etc/make.conf(如果它尚不存在则创建它)。

如果不起作用,请添加

export MAKEOPTS='-j8'
export MAKEFLAGS='-j8'

到您的系统范围的个人资料(例如/ etc /个人资料)。

对我来说,MAKEOPTS本身并不起作用。可能只需要MAKEFLAGS就可以了。

答案 5 :(得分:0)

为什么不创建一个外部makefile,调用另一个这样的makefile,这是从手册here中复制的。

     SUBDIRS = foo bar baz
     .PHONY: subdirs $(SUBDIRS)
     subdirs: $(SUBDIRS)
     $(SUBDIRS):
             $(MAKE) -j 8 -C $@

     foo: baz

答案 6 :(得分:0)

如果您使用的是GNU make:

$ make --version
GNU Make 4.2.1
Built for x86_64-alpine-linux-musl

...然后我发现GNUMAKEFLAGS似乎有用:

export GNUMAKEFLAGS=-j8
make

免责声明,我是使用C工具链的n00b,所以抱歉,如果它不能移植。不过,它可以在Alpine Linux 3.8(在Docker中)上运行。

答案 7 :(得分:-1)

您可以将/usr/bin/make移至/usr/bin/make_orig并制作/usr/bin/make此脚本:

#!/bin/sh

/usr/bin/make_orig -j 8 $@

请务必运行chmod +x /usr/bin/make

如果my other answer中较简单的方法不起作用,请尝试使用此方法。这种方法并不安全,而且有点像污染。