我想告诉make它应该总是使用-j4
选项,即使我没有用命令行指定它。通常我会在某个配置文件中执行此操作(即~/.makerc
)。
gnu make是否存在此类文件?
答案 0 :(得分:8)
export MAKEFLAGS=j4
然而,这可能会干扰基于递归制作的构建(并不是说明智的人正在使用递归make!),干扰了GNU make与其子品牌进行通信的能力。
因此,更明智的方法可能是包装脚本或别名或shell函数。
答案 1 :(得分:2)
嗯,是和否 - 通常你会使用include file.将常用配置项放在一个文件中,比如common.mk
并添加
include common.mk
位于makefile的顶部。如果该标志没有匹配的方法来从make文件中配置它,则可以使用函数
function mk {
make -j4 $*
}
答案 2 :(得分:1)
它不存在,但您可以通过对make进行递归调用来实现此目的。
例如:
<强>生成文件:强>
-include $(HOME)/.makerc
.DEFAULT_GOAL: all
# This will handle a default goal if make is just called without any target
all:
$(MAKE) $(MAKE_OPTIONS) -f Makefile.real $(MAKECMDGOALS)
# This handles all targets and passes it through
%:
$(MAKE) $(MAKE_OPTIONS) -f Makefile.real $(MAKECMDGOALS)
<强> $(HOME)/ makerc:强>
MAKE_OPTIONS := -j4
答案 3 :(得分:0)
我想对John Marshall的回答中提出的解决方案进行一些扩展。
您可以简单地在$PATH
中的某个地方放置一行包装脚本,其中包含以下内容:
#!/bin/bash
$(type -ap make | sed -n 2p) -j4 "$@"
(脚本不必命名为make
,这会使它更简单,但如果是这样的话,我觉得很方便。)
我认为这比其他方法更好,原因如下:
MAKEFLAGS
方法不同,它不会破坏递归构建(实际上这在我的经验中很常见)。include .makerc
方法不同,它可以在本地应用,而无需以任何方式更改任何现有的makefile或您的工作流程。答案 4 :(得分:0)
我喜欢John Marshall建议的parseImages
方法来代替MAKEFLAGS
,它支持类似.makerc项目自动配置文件的功能。但是,我不想记住必须事先提供.env或类似的环境变量(之后再取消设置)。
对此的一种解决方案是将make
分配放在MAKEFLAGS
本身的顶部:
Makefile
运行它:
#!/usr/bin/env make
MAKEFLAGS=s
.PHONY: foo
foo:
echo "hello, make"
与没有$ make foo
hello, make
行的情况相比:
MAKEFLAGS=...