循环makefile具有多个主要功能

时间:2018-12-25 04:59:34

标签: c++ makefile

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

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

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

但是必须有更好的方法来做到这一点。生成文件是否具有某种类型的循环功能,可以使此过程更轻松?像for循环吗?

2 个答案:

答案 0 :(得分:2)

wildcardpatsubststatic pattern rules的混合,以及用于C ++编译和链接的标准make变量:

SRCS := $(wildcard main*.cpp)
EXES := $(patsubst %.cpp,%,$(SRCS))

$(EXES): %: %.cpp
    $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $< $(LDLIBS)

但是,由于make已经知道如何进行所有操作,因此您可以摆脱Makefile,只需键入make main1 ...

答案 1 :(得分:0)

虽然它不是一个非常复杂的Makefile,但是您的解决方案适用于三个简单程序。您可以使其更通用,并通过“全部”目标支持同时构建所有三个目标。

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