如何使这个Makefile更通用

How can I make this Makefile more generic?

本文关键字:Makefile 何使这      更新时间:2023-10-16

我正在通过完成许多小程序来学习C++,每个程序都包含在一个cpp文件中。我还想了解更多关于Makefile的信息,并决定编写一个Makefile,它将编译我所有的小程序,并为每个程序生成一个可执行文件。使用我当前的Makefile,我必须:

  1. 将名称附加到"BINARIES"的末尾

  2. 复制重复的目标并将目标名称替换为二进制名称

我如何编辑这个Makefile,使其更加通用,这样我就可以简单地将新程序的名称附加到"BINARIES"的末尾,而不必继续复制和粘贴重复的目标

    BIN=./bin/
    SOURCE=./src/
    CXX=g++
    CXXFLAGS=-g -c -Wall
    BINARIES=sums-in-loop sum-in-loop sum-of-two
    RM=rm -f
    all: sums-in-loop sum-in-loop sum-of-two
    sums-in-loop:
        $(CXX) $(CXXFLAGS) $(SOURCE)$@.cpp -o $(BIN)$@ 
    sum-in-loop:
        $(CXX) $(CXXFLAGS) $(SOURCE)$@.cpp -o $(BIN)$@ 
    sum-of-two:
        $(CXX) $(CXXFLAGS) $(SOURCE)$@.cpp -o $(BIN)$@ 
    clean:
        $(RM) $(BIN)*

通常的方法是使用模式规则:

BIN=bin
SOURCE=src
CXX=g++
CXXFLAGS=-g -Wall
BINARIES=sums-in-loop sum-in-loop sum-of-two
RM=rm -f
all: $(addprefix $(BIN)/,$(BINARIES))
$(BIN)/%: $(SOURCE)/%.cpp
    $(CXX) $(CXXFLAGS) $< -o $@ 
clean:
    $(RM) $(BIN)/*

使用Makefile中的循环,您可以执行以下操作:

$(foreach bin,$(BINARIES),$(CXX) $(CXXFLAGS) $(SOURCE)$(dir).cpp -o $(BIN)$dir;)

您可以找到一些信息-->http://www.gnu.org/software/make/manual/make.html#Foreach-函数