Bootstrap

通用 Makefile,自动编译子目录,类linux kernel递归编译子目录

通用 Makefile 模板

认真学习了 GNU make 后,终于能看懂 Makefile,也借鉴了 github 上一些其他 Makefile 的实现,自己动手做了两个非常通用的模板。

下载链接https://github.com/xhr-git/MakefileExamples

⭐⭐ 觉得好用请点星 ⭐⭐

有建议也可以提出。

主要有两种功能的 Makefile 模板:

  • 自动编译: 自动编译指定子目录下所有 .c,自动包含子目录下所有 .h 所在路径(注:子目录包括子目录的子目录),并将编译的 .o .d 等文件存放到指定子目录。二次编译时,只编译修改过的文件。
  • 手动编译: 该模板类似 linux kernel 的编译方法,手动编写一个配置文件(子makefile),只编译指定的文件。二次编译时,只编译修改过的文件。

都提供了 makemake 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 作为根路径。

参考

;