在 GNU make 中,是否可以对变量声明使用模式替换?例如,这是一个有效的目标
obj/%.o: src/%.c gcc -c src/$*.c -o obj/$*.o
但这不起作用
BUILD_% = gcc -c src/%.c -o obj/%.o
在 GNU make 中,是否可以对变量声明使用模式替换?例如,这是一个有效的目标
obj/%.o: src/%.c gcc -c src/$*.c -o obj/$*.o
但这不起作用
BUILD_% = gcc -c src/%.c -o obj/%.o
我在这里看到三个单独的问题。
第一:可以%
在食谱中使用和解释吗?例如:
gcc -c src/%.c -o obj/%.o
答案是它不能:在规则解析期间,%
在目标和先决条件中进行评估,而不是在配方中进行评估。相反,您必须使用$*
,这大致但不完全相同。
第二(如果我正确理解您的问题):变量可以用于定义食谱吗?例如:
BUILD = gcc -c src/$*.c -o obj/$*.o
obj/%.o: src/%.c
$(BUILD)
是的他们可以。
第三(如果这就是您要问的):可以使用变量对规则进行参数化,以使%
占位符取自作为参数的变量吗?
不,不是。您可以使用预定义$(foreach ...)
的 、$(call ...)
和$(eval ...)
函数的组合来指定使用从变量中获取的值参数化的规则,但是这些变量的值不能像 的值那样由规则解析过程提供%
。