【发布时间】:2018-01-08 06:26:22
【问题描述】:
我有一个像这样的目录布局的 c 项目
src1
-a.c
-b.c
src2
-c.c
-d.c
objects
我正在尝试将 a/b/c/d 编译为对象文件并将它们保存到对象目录中,这是我的 Makefile 的一部分。
src1 = src1/
src1 = src2/
obj = objects/
src1_files = a.c b.c
src2_files = c.c d.c
source_files = $(addprefix $(src1), $(src1_files)) $(addprefix $(src1), $(src2_files))
objects := $(addprefix $(obj), $(src1_files:.c=.o)) $(addprefix $(obj), $(src2_files:.c=.o))
$(obj)%.o: $(source_files)
$(CC) $(CFLAGS) -c $< -o $@
all: $(objects)
但是,当我尝试运行 make 时,我得到了以下结果。
gcc -Wall -c src1/a.c -o objects/a.o
gcc -Wall -c src1/a.c -o objects/b.o
gcc -Wall -c src1/a.c -o objects/c.o
gcc -Wall -c src1/a.c -o objects/d.o
有人知道为什么要这么做吗?
【问题讨论】:
-
$(addprefix $(src1), $(src2_files)-->$(addprefix $(src2), $(src2_files) -
@Gaurav 这还不够
-
这是我在阅读
Makefile时遇到的。我必须执行 Makefile 才能发现任何其他问题。! :-| -
还有一个错字:
src1 = src2/(第二行)。 -
@Gaurav 当然是正确的,但是这个 Makefile 除了拼写错误之外还有一个概念错误,它永远不会像这样工作;)