如何通过修改make命令覆盖Makefile中的标志

时间:2016-07-21 11:41:42

标签: c++ makefile build

我目前正在运行make -j20 TGT=stuff,它会从我无法编辑的Makefile中获取数百个标记。

我想删除优化-O3以将-O0传递给调试。我可以通过修改Makefile命令来覆盖make -j20 ...中的内容吗?

编辑:我使用g ++

1 个答案:

答案 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

制作手册非常好,我只能推荐一下。