在GNU make中,是否可以使用模式替换来进行变量声明?例如,这是一个有效的目标
obj/%.o: src/%.c gcc -c src/$*.c -o obj/$*.o
但这不起作用
BUILD_% = gcc -c src/%.c -o obj/%.o
答案 0 :(得分:0)
我在这里看到三个不同的问题。
首先:recipes可以%
使用和解释吗?例如:
gcc -c src/%.c -o obj/%.o
答案是它不能:在规则解析期间,%
在目标和先决条件中进行评估,而不是在食谱中进行评估。相反,您必须使用$*
,which is roughly but not exactly the same thing。
其次(如果我理解你的问题):可以用变量来定义食谱吗?例如:
BUILD = gcc -c src/$*.c -o obj/$*.o
obj/%.o: src/%.c
$(BUILD)
是的,他们可以。
第三个(如果这是你要求的话):可以用变量对规则进行参数化,使得%
占位符取自一个变量作为参数吗?
不,不是真的。您可以use a combination of the predefined $(foreach ...)
, $(call ...)
, and $(eval ...)
functions to specify rules parametrized with values taken from variables,但规则解析流程无法提供这些变量的值,例如%
的值。