0

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

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

make file1.x我可以用,等单独使它们很好make file2.x。我想在构建所有文件的 makefile 中有一个目标。我尝试了几件事,但没有奏效:

all: file*.x

all: file%.x

是否有捷径可寻?提前致谢。

4

3 回答 3

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

all: $(FILES)
于 2013-03-29T15:29:19.590 回答
0

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

如果你真的只是想按照自己的方式做,我会做类似的事情:

FILES=test1 test2 test3

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

$(FILES:%.o): %.c
  $(CC) -o $@ $^
于 2013-03-29T15:30:35.043 回答
0

I actually answered my own question (with help from answers to this question). The answer marked "correct" also works.

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

Thanks for the help.

于 2013-03-29T15:40:07.840 回答