在子文件夹问题中制作源代码

时间:2011-07-11 21:55:30

标签: makefile gnu-make

我有makefile编译子文件夹中的所有* .c文件:

objects := $(patsubst %.c,%.o,$(wildcard *.c))
cobj: $(objects)
$(objects): %.o: %.c
    $(CC) -c $< -o $@

我在尝试从父文件夹执行相同操作时遇到问题。假设我的.c文件位于'csrc'文件夹中

objects := $(addprefix, csrc/, $(patsubst %.c,%.o,$(wildcard *.c)))
cobj: $(objects)
$(objects): csrc/%.o: %.c
    $(CC) -c $< -o $@

我总是看到“对于cobj没什么可做的......有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您的模式规则csrc/%.o: %.c转换为例如csrc/foo.o foo.c,而不是csrc/foo.c。据推测,这不是你想要的。

为什么不只是%.o: %.c

答案 1 :(得分:1)

Oli Charlesworth所说的是正确的,但还有另一个错误。通配符函数仅检查当前目录。就像现在一样,$(objects)将为空(我假设当前的父目录中没有源文件)。您必须指定路径:$(wildcard csrc/*.c)