我正在尝试编写一个可以为每个主要功能创建一个可执行文件的makefile。
我有一个文件列表:main1.cpp
,main2.cpp
和main3.cpp
。它们每个都包含一个int main()
函数。显然我不能将它们构建到一个exec中,这不是这里的目标,那么如何将其中的每个构建到其自己的可执行文件中呢?这是一种解决方案:
main1: main1.cpp
$(CC) -o $@ $^
main2: main2.cpp
$(CC) -o $@ $^
main3: main3.cpp
$(CC) -o $@ $^
但是必须有更好的方法来做到这一点。生成文件是否具有某种类型的循环功能,可以使此过程更轻松?像for循环吗?
答案 0 :(得分:2)
wildcard
,patsubst
和static 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 $@ $^