所以我一直在尝试创建一个makefile,它在一个项目中的结构如下:
project
|- bin
|- src
| | main.c
| |- test
| | | test.c
| Makefile
我想使用模式规则将c文件编译成o文件:
dir_bin = ./bin
dir_src = ./src
srcs := $(wildcard $(dir_src)/*.c $(dir_src)/*/*.c)
objs := $(addprefix $(dir_bin)/, $(notdir $(srcs:%.c=%.o)))
.PHONY: all
all: $(objs)
$(dir_bin)/%.o: $(dir_src)/%.c
$(cc) -o $@ $<
这将包括:
bin/main.o: src/main.c
但是如果我想编译test/test.c文件,我该如何编写一个模式规则,同时支持一个项目中的源文件,该项目具有2个文件夹深度,将扩展到:
bin/test.o: src/test/test.c
1条答案
按热度按时间bd1hkmkf1#
我认为您必须将源代码树保留在二叉树中,以便能够使用这些模式规则(请参见this)。
因此,Makefile变为:
编译后,生成的
bin
目录: