使所有文件与具有单个目标的模式匹配

时间:2013-03-29 15:22:03

标签: gcc makefile

我有多个源文件(让我们称之为file1.c,file2.c等),我想编译成单独的可执行文件。 makefile的相关部分:

file%.x: file%.o
    $(CC) $(CFLAGS) $< -o $@
file%.o: file%.c
    $(CC) $(CFLAGS) -c $< -o $@

我可以使用make file1.xmake file2.x等单独使用它们。我希望在makefile中有一个构建所有文件的目标。我尝试了一些东西,但它们没有用:

all: file*.x

all: file%.x

有一种简单的方法吗?提前谢谢。

3 个答案:

答案 0 :(得分:1)

SOURCES := $(wildcard file*.c)
FILES := $(SOURCES:.c=.x)

all: $(FILES)

答案 1 :(得分:0)

这里奇怪的是你只是在构建一堆OBJECT文件。通常,目标文件将被用于链接在一起以形成可执行文件,因此您的默认规则是构建该可执行文件,这将构建它的任何依赖项。

如果你真的只想按照自己的方式去做,我会这样做:

FILES=test1 test2 test3

all: $(FILES:%=%.o)

$(FILES:%.o): %.c
  $(CC) -o $@ $^

答案 2 :(得分:0)

我实际上回答了我自己的问题(在this question的答案的帮助下)。标记为“正确”的答案也有效。

all: $(addsuffix .x, $(basename $(wildcard file*.c))

感谢您的帮助。