【发布时间】:2026-02-18 08:35:01
【问题描述】:
有什么办法可以做
$ make
默认为:
$ make -j 8
?
【问题讨论】:
有什么办法可以做
$ make
默认为:
$ make -j 8
?
【问题讨论】:
将环境变量 MAKEFLAGS 设置为 -j 8。如果您使用 csh 或 tcsh,您可以使用 setenv MAKEFLAGS '-j 8' 执行此操作。如果您使用的是 bash,则可以使用 export MAKEFLAGS='-j 8' 执行此操作。您可能希望将此命令放在 shell 的启动文件中,例如 .cshrc 或 .bashrc(在您的主目录中)。
注意:像这样设置默认值将适用于所有 make 调用,包括当您“制作”一个不是您自己的项目或运行调用 make 的脚本时。如果项目设计得不好,在构建多个作业并行执行时可能会出现问题。
【讨论】:
建议alias make='make -j 8' 的答案很好地回答了您的问题。
但是,我建议不要这样做!
无论如何,请使用别名来节省输入 - 但将其命名为 make 以外的其他名称。
对于您当前正在从事的任何项目都可能没问题;但是很可能编写缺少依赖项的makefile,这些依赖项不能很好地与-j一起工作,如果你遇到这样的事情,你会想知道为什么构建对你来说以一种神秘的方式失败,但对其他人来说却很好人。
(也就是说,如果你做别名make,你可以通过输入\make让bash忽略别名。)
【讨论】:
alias make="make -j 8",假设是 bash shell
【讨论】:
如果你使用的是命令行,你可以这样做:
alias make='make -j 8'
这将是临时的,要使其永久化,您需要将其添加到 .bashrc
【讨论】:
添加
MAKEOPTS='-j8'
MAKEFLAGS='-j8'
到/etc/make.conf(如果它不存在就创建它)。
如果这不起作用,请添加
export MAKEOPTS='-j8'
export MAKEFLAGS='-j8'
到您的系统范围的配置文件(例如,/etc/profile)。
对我来说,单独使用 MAKEOPTS 是行不通的。可能只需要 MAKEFLAGS。
【讨论】:
MAKEFLAGS 只能保留 -j,没有数字
strings /usr/bin/make | grep MAKEOPTS 也没有输出任何内容),我得到 ' -j4 --jobserver-auth=3,4' must have --jobs=4。
为什么不创建一个外部makefile,像这样调用另一个makefile,这是从手册here复制的。
子目录 = foo bar baz .PHONY: 子目录 $(SUBDIRS) 子目录:$(子目录) $(子目录): $(MAKE) -j 8 -C $@ 富:巴兹【讨论】:
如果您使用的是 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 中)上运行。
【讨论】:
您可以将/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 中更简单的方法不起作用,请尝试此方法。这种方法不太安全,而且有点笨拙。
【讨论】: