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

标签 c++ makefile build

我目前运行的 make -j20 TGT=stuffMakefile 中获取了数百个我无法编辑的标志。

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

编辑:我使用 g++

最佳答案

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

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

关于c++ - 如何通过修改 make 命令覆盖我的 Makefile 中的标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38503337/

相关文章:

build - mvn :assembly and mvn:package 之间有什么区别

C++调用接口(interface)方法导致指针在VS2012中不完整

c++ - QML ListView 和段错误

c - GNU make 在 makefile 完成之前停止而没有错误

c++ - 如何根据构建选项制作生成文件

ios - 如何获取当前在 Xcode 中运行的目标的名称?

c++ - 与 .mm 源链接时 ObjC 框架的 undefined symbol

c++ - Linux/POSIX 相当于 C++ 代码中的 Win32 API TerminateProcess

ubuntu - make 总是重建所有目标

tensorflow - 错误 : Config value cuda is not defined in any . rc 文件信息:调用 ID:1faa4ce7-96be-42d3-80bc-10cac6a8f3a7