相信一个简单的makefile, 只要用过C语言的都能写出来。
但是如果工程中包含了几十个文件夹, 上万个文件, 那用一般的方式就搞不定了。
在用dpdk 的时候, 会经常修改makefile要适配我们的工程。 最开始也是用dpdk中自带的makefile进行修改。因为dpdk自带的make 都比较简洁。在dpdk v20之前, makefile中会有 include xx.mk的这种用法,这个是把dpdk自己的一些环境变量, 比如目录, 编译器这些提前设置好。
从v20之后dpdk中makefile中就没有这个用法了, 因为采用了更高级的编译方法(ninja build).
在使用dpdp的时候,也是从那个时候开始接触到了wildcard, subdir, filter , %.o , VPATH, .PHYON, source_y, 等变量和用法。 虽然当时也猜到了这些默认的变量是在做什么工作, 但是也没有一份系统性的说明文档。
今天在看内核相关文章时, 看到这个文章, 发现真的非常好, 以下这个文章中基本解答了80%的 问题。
全网最牛Linux内核Makefile系统文件详解(纯文字代码) - 知乎
感谢分享者的总结,当然还有一些比如静态库, 动态库, 这个文章中没有提到, 一些其他的编译参数后续用到再补充到这个文章中。