我想在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 "$@" "$<"
然而,上述行的最后一部分(引用部分)会产生问题 我的问题是如何将此行分配给变量?我尝试了所有类型的转义字符组合,但似乎没有任何效果。
感谢。
答案 0 :(得分:0)
问题来自FLAGS :=
。实际上,使用:=
运算符设置FLAGS
变量会指示make
仅评估变量的值一次,现在。但是,在定义FLAGS
时,未定义变量@
。它只会在具有g++
命令的规则中定义。这就是为什么它导致-MF""
。
您应该使用FLAGS=
(无专栏)。使用简单=
定义,FLAGS
变量仅在使用时进行评估,即在g++
命令行中进行评估。在那个地方,$@
变量将被定义并有效。