具有多个主要功能的循环生成文件

Looping makefile with multiple main functions

本文关键字:循环 文件 功能      更新时间:2023-10-16

我正在尝试编写一个可以为每个主函数创建一个可执行文件的makefile。

我有一个文件列表:main1.cppmain2.cppmain3.cpp 。它们都包含一个int main()函数。显然,我无法将它们构建到一个可执行文件中,这不是本文的目标,那么如何将每个可执行文件构建到自己的可执行文件中呢?这是一个解决方案:

main1: main1.cpp
    $(CC) -o $@ $^
main2: main2.cpp
    $(CC) -o $@ $^
main3: main3.cpp
    $(CC) -o $@ $^

但必须有更好的方法来做到这一点。是否有某种类型的循环功能可以使此过程更容易?喜欢 for 循环?

wildcard

patsubst和静态模式规则的混合,加上用于C++编译和链接的标准 make 变量:

SRCS := $(wildcard main*.cpp)
EXES := $(patsubst %.cpp,%,$(SRCS))
$(EXES): %: %.cpp
    $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $< $(LDLIBS)

但是,由于make已经知道如何制作所有这些,您也可以摆脱Makefile,只需键入make main1...

虽然它不是一个非常复杂的生成文件,但您的解决方案适用于三个简单的程序。 您可以使其更加通用,并支持使用"all"目标同时构建所有三个目标。

all: main1 main2 main3
main1: main1.cpp
    $(CC) -o $@ $^
main2: main2.cpp
    $(CC) -o $@ $^
main3: main3.cpp
    $(CC) -o $@ $^