【问题标题】:How can I override flags in my Makefile by modifying the make command如何通过修改 make 命令来覆盖 Makefile 中的标志
【发布时间】:2023-03-18 23:59:01
【问题描述】:

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

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

编辑:我使用 g++

【问题讨论】:

  • 这取决于 Makefile 的编写方式。您可以发布 Makefile 的相关摘录吗?
  • 很遗憾没有,但我可以说CPPFLAGS 的设置是什么
  • 根据gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html,“最后一个这样的选项是有效的”(关于 O 标志)。因此,如果您能找到一种方法将 -O0 添加到命令中稍后添加的变量中,而不是 -O3 标志,那么它应该可以工作。也就是说,如果你使用 gcc...
  • 最简单的方法可能是为 Makefile 使用的编译命令创建一个别名。 IE。导致gcc <options> 实际运行gcc <options> -O0。请参阅stackoverflow.com/a/7131683/5533897 在 bash 中创建这样的别名。或者干脆让 gcc 别名过滤掉-O3

标签: c++ makefile build


【解决方案1】:

您的问题的答案取决于用于编译 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

制作手册真的很好,我只能推荐看看。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-31
    • 2021-06-26
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 2010-12-11
    • 2011-11-24
    • 1970-01-01
    相关资源
    最近更新 更多