我目前运行的 make -j20 TGT=stuff
从 Makefile
中获取了数百个我无法编辑的标志。
我想删除优化 -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/