Liunx之编译脚本Makefile四层
前言
该文章只记录一个最基本的 Makefile 的实现,在阅读该文章前,我假设读者已经掌握了 Liunx 之编译脚本 Makefile 介绍 知识点
害,还是好伤元气,一点都不想写这无意义的玩意儿,前方路漫漫,一步一步来吧 ~~~
这只是一个非常小的 Demo 项目,在实际中,我们写的项目一般都比这个 Demo 复杂了 N 次方的。
四层功力是指 隐式规则 + 显式规则 + 变量定义 + 通配符
通配符
* $* 不包含扩展名的目标文件名称
* $@ 表示目标文件
* $^ 所有的依赖文件,以空格分开,并以出现的先后为序,这可能重复包含依赖文件
* $< 第一个依赖文件的名称
* $? 所有时间戳目标文件的依赖文件,并以空格分开
* % 任意的
测试项目说明
/*
project name : makefile_unit_testing
compile : gcc
system : ubuntu 18.04.4 -64bit
source level :
main.c
unit_log.h
unit_log.c
*/
提醒
大可不必强迫自己去做一些伤元气的事,或者写一些伤元气的代码。一切为了部落,呼哈 ~~
目录
Makefile 之四层功力代码实现
# 构建的项目输出名称
build_object = makefile_unit_testing
# 编译器
cc = gcc
# 附带编译参数
cflagas := -g -c
# 依赖的二进制文件集合
objects := unit_log.o main.o
# 定义宏定义
define_macro :=
$(build_object): $(objects)
$(cc) -o $(build_object) $(objects)
%.o: %.c
$(cc) $(cflagas) $(define_macro) $^ -o $@
clean:
rm -rf *.o $(build_object)
Makefile 测试结果
- 查看当前项目的目录
- make 之后 makefile 执行的流程
- 执行 make 构建输出的文件
- Makefile 代码