在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 "$@" "$<"