【发布时间】:2016-11-04 15:57:14
【问题描述】:
是否有任何 GNU Make 特殊变量可以知道用户在命令行调用中发送的目标是哪个目标?实现类似(这只是一个例子):
// makefile
ifeq ($(USER_TARGET),"plain")
CXXFLAGS += -O0
else
CXXFLAGS += -O3
endif
plain:
// do something using CXXFLAGS
all:
// other rule using CXXFLAGS
重要的是,USER_TARGET 变量(可以是特殊的 GNU Make 变量,或由返回用户目标的某些特殊 GNU Make 函数设置的自定义变量)包含用户指定的原始目标在这样的电话中:
$ make plain
而不是依赖树的任何步骤中的值。换句话说,USER_TARGET 在构建依赖链期间一定不能改变,因为如果我没记错的话,USER_TARGET 的值将在第一次使用时进行评估,而不是在任何情况下都会发生文件的重点,所以,我想确保当前构建链的步骤不会改变USER_TARGET的值。
不知道是我说的够清楚还是解释的太多了。
如果 GNU Make 中没有内置机制,那么任何 $(shell command) 技巧也是受欢迎的。
【问题讨论】:
-
也许这对你有用? Can't assign a variable inside a recipe.
-
我不确定您要做什么,但我最近看到了一个带有
debug: clean@make CFLAGS='${DEBUG_CFLAGS}'的 makefile -
请注意,可以指定多个目标,例如
make -f Makefile build test可以用于调用构建和测试目标 -
@mjs 没错,好点。我还没想过。