我目前正在运行make -j20 TGT=stuff
,它会从我无法编辑的Makefile
中获取数百个标记。
我想删除优化-O3
以将-O0
传递给调试。我可以通过修改Makefile
命令来覆盖make -j20 ...
中的内容吗?
编辑:我使用g ++
答案 0 :(得分:2)
您的问题的答案取决于用于编译C ++文件的规则。由于您不想共享您的makefile,我使用C ++程序的默认隐式规则来解释它。
你可以通过调用make来覆盖任何make变量,比如'MY_VAR': 让MY_VAR ='你好'
编译C ++的默认配方看起来与此类似:
%.o : %.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@
按照惯例,CPPFLAGS是传递给C和C ++预处理器的标志,CXXFLAGS与C ++编译相关。
所以我假设你makefile设置CXXFLAGS,就这样说:
CXXFLAGS = -O3
您希望它为-O0,因此您可以覆盖CXXFLAGS。
调用make就像这样:
make -j20 TGT=stuff CXXFLAGS='-O0'
由于你想调试你可能应该使用:
make -j20 TGT=stuff CXXFLAGS='-O0 -g'
如果你的makefile中CXXFLAGS的默认值包含其他重要标志,你也必须指定它们 - 你覆盖它的值。
另见: https://www.gnu.org/software/make/manual/html_node/Overriding.html
制作手册非常好,我只能推荐一下。