makefile 编译不同目录下的源文件

时间:2021-09-15 13:46:27

如题,今天我们来解决 在makefile文件中 如何配置,编译在不同目录下的源文件,因为有时候有这样的场景嘛。

测试场景

目录结构如下,头文件在include下,源文件在 src下,客户端程序main.c 在 03makefile文件下。如何来编译main.c呢?

makefile 编译不同目录下的源文件

makefile文件内容

文件内容有详细解释哟,由于在不同目录下,那么我们在编译.c文件时,他们的路径就会有多个,模式匹配就要写多个

target = app#由于 .c文件在不同的文件下,那么匹配模式 要匹配不同文件下的%.c文件
src1 = $(wildcard ./src/*.c)
src2 = $(wildcard ./*.c)
obj1 = $(patsubst %.c,%.o,$(src1))
obj2 = $(patsubst %.c,%.o,$(src2))
src = ./src/


$(target):$(obj1) $(obj2)
gcc $^ -o $@
# gcc $(obj) -o $(target)
#编译 src下的.c文件 为.o文件
%.o:$(src)%.c
gcc -c $< -o $@
#编译 当前文件下的main.c文件
%.o:%.c
gcc -c $< -o $@
.PHONY:clean #防止 外面有clean文件 阻止执行clean
clean:
#-mkdir /root/aaa #在命令前添加 - 当前命令出错,仍然可以往后面执行
-rm $(target) $(obj1) $(obj2) -f
hello:
echo "hello world"

检验结果

makefile 编译不同目录下的源文件

makefile 编译不同目录下的源文件