我有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没什么可做的......有什么想法吗?
答案 0 :(得分:2)
您的模式规则csrc/%.o: %.c
转换为例如csrc/foo.o
foo.c
,而不是csrc/foo.c
。据推测,这不是你想要的。
为什么不只是%.o: %.c
?
答案 1 :(得分:1)
Oli Charlesworth所说的是正确的,但还有另一个错误。通配符函数仅检查当前目录。就像现在一样,$(objects)
将为空(我假设当前的父目录中没有源文件)。您必须指定路径:$(wildcard csrc/*.c)