在makefile中应用DRY原理

问题描述 投票:0回答:1

仅在本例中使用一个用例。我正在编译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

如果可能,请向我提供所演示行为的实际语法。预先感谢。

c++ makefile
1个回答
2
投票

您可以执行以下操作:

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

© www.soinside.com 2019 - 2024. All rights reserved.