从源文件列表生成 makefile 目标
Generate makefile targets from a list of source files
我正在尝试使用 make 创建构建系统并希望执行以下操作:
有一个在 makefile 中指定的源文件列表,例如
SOURCES = a.cpp b.cpp c.cpp
自动创建分别依赖于每个文件的构建目标
即自动扩展为的单个规则:
a.o: a.cpp
$(CC) $(CFLAGS) -c a.cpp -o a.o
b.o: b.cpp
$(CC) $(CFLAGS) -c b.cpp -o b.o
c.o: c.cpp
$(CC) $(CFLAGS) -c c.cpp -o c.o
我试过以下方法:
SOURCES = a.cpp b.cpp c.cpp
OBJECTS = $(SOURCES:.cpp=.o)
$(OBJECTS): $(SOURCES)
$(CC) $(CFLAGS) -c $< -o $@
然而,这似乎扩展为以下内容
a.o: a.cpp b.cpp c.cpp
$(CC) $(CFLAGS) -c a.cpp -o a.o
b.o: b.cpp b.cpp c.cpp
$(CC) $(CFLAGS) -c a.cpp -o b.o
c.o: c.cpp b.cpp c.cpp
$(CC) $(CFLAGS) -c a.cpp -o c.o
哪个不对
有没有简单的方法可以达到我之前写的结果?
Make 已经内置了将 .cpp
文件转换为 .o
文件的规则。随便写:
SOURCES = a.cpp b.cpp c.cpp
all: $(SOURCES:.cpp=.o)
它会起作用的。如果您想知道如何编写自己的规则,请阅读 implicit rules, in particular pattern rules。
我正在尝试使用 make 创建构建系统并希望执行以下操作:
有一个在 makefile 中指定的源文件列表,例如
SOURCES = a.cpp b.cpp c.cpp
自动创建分别依赖于每个文件的构建目标
即自动扩展为的单个规则:
a.o: a.cpp
$(CC) $(CFLAGS) -c a.cpp -o a.o
b.o: b.cpp
$(CC) $(CFLAGS) -c b.cpp -o b.o
c.o: c.cpp
$(CC) $(CFLAGS) -c c.cpp -o c.o
我试过以下方法:
SOURCES = a.cpp b.cpp c.cpp
OBJECTS = $(SOURCES:.cpp=.o)
$(OBJECTS): $(SOURCES)
$(CC) $(CFLAGS) -c $< -o $@
然而,这似乎扩展为以下内容
a.o: a.cpp b.cpp c.cpp
$(CC) $(CFLAGS) -c a.cpp -o a.o
b.o: b.cpp b.cpp c.cpp
$(CC) $(CFLAGS) -c a.cpp -o b.o
c.o: c.cpp b.cpp c.cpp
$(CC) $(CFLAGS) -c a.cpp -o c.o
哪个不对
有没有简单的方法可以达到我之前写的结果?
Make 已经内置了将 .cpp
文件转换为 .o
文件的规则。随便写:
SOURCES = a.cpp b.cpp c.cpp
all: $(SOURCES:.cpp=.o)
它会起作用的。如果您想知道如何编写自己的规则,请阅读 implicit rules, in particular pattern rules。