在makefile中定义一个带有特殊字符的变量--MF"$(@:%.o=%.d)“;

在makefile中定义一个带有特殊字符的变量--MF"$(@:%.o=%.d)“;,makefile,g++,Makefile,G++,我想在生成文件中运行下一行: g++ -O2 -g -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -o "$@" "$<" 然后使用此变量代替硬编码行: g++ $(FLAGS) -o "$@" "$<" g++$(标志)-o“$@”“$问题来自标志:=。实际上,使用:=操作符设置标志变量会指示make立即只计算变量的值一次。但是,在定义标志时,未定义变量@。它将仅在具有g++命令的规则中定义。这就是为什么它会

我想在生成文件中运行下一行:

g++  -O2 -g -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -o "$@" "$<"
然后使用此变量代替硬编码行:

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

g++$(标志)-o“$@”“$问题来自
标志:=
。实际上,使用
:=
操作符设置
标志
变量会指示
make
立即只计算变量的值一次。但是,在定义
标志时,未定义变量
@
。它将仅在具有
g++
命令的规则中定义。这就是为什么它会产生
-MF”“


您应该使用
标志=
(无列)。使用简单的
=
定义,
标志
变量将仅在使用时进行计算,即在
g++
命令行中。此时,
$@
变量将被定义并有效。

运行
make
时命令行是否正确显示?缺少什么?这个问题说明应该用反斜杠避开双引号@当我试图用反斜杠转义引号时,我得到g++-O2-g-Wall-c-fmessage length=0-MMD-MP-MF\“-o.o”“...cpp”
g++ $(FLAGS) -o "$@" "$<"