1

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

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

但这不起作用

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

4

1 回答 1

0

我在这里看到三个单独的问题。

第一:可以%食谱中使用和解释吗?例如:

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

答案是它不能:在规则解析期间,%在目标和先决条件中进行评估,而不是在配方中进行评估。相反,您必须使用$*这大致但不完全相同

第二(如果我正确理解您的问题):变量可以用于定义食谱吗?例如:

BUILD = gcc -c src/$*.c -o obj/$*.o

obj/%.o: src/%.c
    $(BUILD)

是的他们可以。

第三(如果这就是您要问的):可以使用变量对规则进行参数化,以使%占位符取自作为参数的变量吗?

不,不是。您可以使用预定义$(foreach ...)的 、$(call ...)$(eval ...)函数的组合来指定使用从变量中获取的值参数化的规则,但是这些变量的值不能像 的值那样由规则解析过程提供%

于 2013-03-04T15:53:25.783 回答