2013-03-03 64 views
1

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

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

但这不起作用

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

+0

你想创建一个名称实际上是“BUILD_%”的变量吗?其价值实际上是“gcc -c src /%.c -o obj /%o”?或者是其他东西? – Beta 2013-03-03 23:33:46

+0

为什么你想*变量*(或* macrofy *,在Makefile中说)你的'gcc'命令?可能比试图让'make'来评估'%'更简单。 – emallove 2013-03-04 03:09:03

+0

我试图创建一种方法来启用一个目标,以调用BUILD_FOO中保存的字符串,BUILD_FOO由BUILD_%= gcc -c src /%。c -o obj /%。o定义,用FOO替换%。事实证明,我是以错误的方式去做的。有时,当语言不允许你做某件事时,这是一个不好的主意:) – WesleyOldaker 2013-03-07 23:09:01

回答

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,但这些变量的值不能由规则解析过程提供,如值%

+0

谢谢你的回答。我从错误的角度来攻击这个问题。在重组我的目标时,我发现我终究不需要这样的宏观变量。 – WesleyOldaker 2013-03-07 23:06:12