在GNU make中,是否可以对变量声明使用模式替换?例如,这是一个有效的目标GNU make中变量声明的模式替换
obj/%.o: src/%.c gcc -c src/$*.c -o obj/$*.o
但这不起作用
BUILD_% = gcc -c src/%.c -o obj/%.o
在GNU make中,是否可以对变量声明使用模式替换?例如,这是一个有效的目标GNU make中变量声明的模式替换
obj/%.o: src/%.c gcc -c src/$*.c -o obj/$*.o
但这不起作用
BUILD_% = gcc -c src/%.c -o obj/%.o
我在这里看到三个不同的问题。
第一:可以使用%
并在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,但这些变量的值不能由规则解析过程提供,如值%
。
谢谢你的回答。我从错误的角度来攻击这个问题。在重组我的目标时,我发现我终究不需要这样的宏观变量。 – WesleyOldaker 2013-03-07 23:06:12
你想创建一个名称实际上是“BUILD_%”的变量吗?其价值实际上是“gcc -c src /%.c -o obj /%o”?或者是其他东西? – Beta 2013-03-03 23:33:46
为什么你想*变量*(或* macrofy *,在Makefile中说)你的'gcc'命令?可能比试图让'make'来评估'%'更简单。 – emallove 2013-03-04 03:09:03
我试图创建一种方法来启用一个目标,以调用BUILD_FOO中保存的字符串,BUILD_FOO由BUILD_%= gcc -c src /%。c -o obj /%。o定义,用FOO替换%。事实证明,我是以错误的方式去做的。有时,当语言不允许你做某件事时,这是一个不好的主意:) – WesleyOldaker 2013-03-07 23:09:01