仅在本例中使用一个用例。我正在编译c++
文件,有时,我想在没有debugging symbols
的情况下进行编译,即启用-g
,有时我想启用它。
因此,我想到了仅创建两个目标,其中第二个目标将重新分配一个make变量(是否可能)并更改编译选项。我想知道使用makefile是否可以实现这种行为?
下面是一些伪代码演示,用户在命令行中输入make first@bg
:
gpp = g++ -std=c++17
first: hello.cpp
$(gpp) hello.cpp -o $@
#/* some other recipes, assuming the list is really long*/
first@bg: main.o
gpp = g++ -g -std=c++17
execute_all_recipe_of_first_target_which_is_really_long_to_copy()
main.o: main.cpp
$(gpp) main.cpp -c -o main.o #the value of gpp should'd also changed here since first@bg executed
如果可能,请向我提供所演示行为的实际语法。预先感谢。
您可以执行以下操作:
first@bg: gpp += -g
first@bg: first
请注意,定义CXX=g++
和CXXFLAGS=-std=c++17
然后调整CXXFLAGS
,并使用make DEBUG=1
进行调试构建更惯用:
CXX=g++
CXXFLAGS=-std=c++17
ifeq ($(DEBUG), 1)
CXXFLAGS+=-g
endif
例如,然后将编译器调用为$(CXX) $(CXXFLAGS) hello.cpp -o $@
。另请参见this link