GNU make中变量声明的模式替换

时间:2013-03-03 20:10:58

标签: makefile

在GNU make中,是否可以使用模式替换来进行变量声明?例如,这是一个有效的目标

obj/%.o: src/%.c
    gcc -c src/$*.c -o obj/$*.o

但这不起作用

BUILD_% = gcc -c src/%.c -o obj/%.o

1 个答案:

答案 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,但规则解析流程无法提供这些变量的值,例如%的值。