C语言 如何制作具有2个文件夹深度依存关系的阵列规则?

q3qa4bjr  于 2023-02-15  发布在  其他
关注(0)|答案(1)|浏览(90)

所以我一直在尝试创建一个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
bd1hkmkf

bd1hkmkf1#

我认为您必须将源代码树保留在二叉树中,以便能够使用这些模式规则(请参见this)。
因此,Makefile变为:

dir_bin = ./bin
dir_src = ./src

srcs := $(wildcard $(dir_src)/*.c $(dir_src)/*/*.c)
objs := $(addprefix $(dir_bin)/,$(srcs:.c=.o))

.PHONY: all
all: $(objs)

$(objs): $(dir_bin)/%.o: %.c
    mkdir -p $(@D)
    $(cc) -c $< -o $@

编译后,生成的bin目录:

$ tree bin/
bin/
└── src
    ├── main.o
    └── test
        └── test.o

相关问题