从源文件列表生成makefile目标

时间:2015-03-22 14:22:36

标签: makefile gnu-make

我正在尝试使用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

哪个不对

有没有一种简单的方法来实现我之前写的结果?

1 个答案:

答案 0 :(得分:1)

Make已经有将.cpp文件转换为.o文件的内置规则。只需写下:

SOURCES = a.cpp b.cpp c.cpp

all: $(SOURCES:.cpp=.o)

它会起作用。如果您想知道如何编写自己的规则,请阅读implicit rules,特别是pattern rules