通用 Makefile 模板
认真学习了 GNU make 后,终于能看懂 Makefile,也借鉴了 github 上一些其他 Makefile 的实现,自己动手做了两个非常通用的模板。
下载链接:https://github.com/xhr-git/MakefileExamples
⭐⭐ 觉得好用请点星 ⭐⭐
有建议也可以提出。
主要有两种功能的 Makefile 模板:
- 自动编译: 自动编译指定子目录下所有
.c
,自动包含子目录下所有.h
所在路径(注:子目录包括子目录的子目录),并将编译的.o
.d
等文件存放到指定子目录。二次编译时,只编译修改过的文件。 - 手动编译: 该模板类似 linux kernel 的编译方法,手动编写一个配置文件(子makefile),只编译指定的文件。二次编译时,只编译修改过的文件。
都提供了 make
和 make clean
的实现,如果需要编译 c++
,可能需要自行修改文件中 .c
或 .h
部分。
关于如何使用,源码中已经包含完整示例,可直接编译测试,如果遇到问题可反馈。
1. 自动编译
BUILD_OUTPUT
- 指定编译后的.o
等文件存放目录。BUILD_SRC
- 指定需要编译的子目录。BUILD_EXE
- 编译出的可执行文件名。INCLUDES
- 头文件搜索路径会添加,所以一般不需要指定该变量,但是可以用这个变量添加BUILD_SRC
以外目录的其他头文件路径。LD_DIRS
LD_LIBS
- 指定库搜索路径和库。
2. 手动编译
大多数参数类似自动编译,仅描述一些不同地方:
- 没有
BUILD_SRC
变量,因为要编译哪些内容是由BUILD.mk
文件指定的。 INCLUDES
- 头文件搜索路径需要手动指定,不会自动搜索。不要使用相对路径,使用ROOT_DIR
作为根路径。