在makefile中使用特殊字符定义变量 - -MF“$(@:%。o =%。d)”

时间:2013-11-21 10:16:43

标签: makefile g++

我想在makefile中运行下一行:

g++  -O2 -g -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -o "$@" "$<"

我想定义一个包含所有标志的变量:

FLAGS := -O2 -g -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)"

然后使用此变量而不是硬编码行:

g++ $(FLAGS) -o "$@" "$<"  

然而,上述行的最后一部分(引用部分)会产生问题 我的问题是如何将此行分配给变量?我尝试了所有类型的转义字符组合,但似乎没有任何效果。

感谢。

1 个答案:

答案 0 :(得分:0)

问题来自FLAGS :=。实际上,使用:=运算符设置FLAGS变量会指示make仅评估变量的值一次,现在。但是,在定义FLAGS时,未定义变量@。它只会在具有g++命令的规则中定义。这就是为什么它导致-MF""

您应该使用FLAGS=(无专栏)。使用简单=定义,FLAGS变量仅在使用时进行评估,即在g++命令行中进行评估。在那个地方,$@变量将被定义并有效。