简介
现在讲述如何写 makefile 的文章很多,从几页的简易版到几十页、几百页的详细版都有。Makefile 有自己的书写格式、关键字、函数、隐含规则,像C语言一样灵活多变、功能强大。在Makefile中还可以使用系统shell所提供的任何命令来完成想要的工作,这又涉及shell编程知识。一般算法工程师也不会花太多时间去琢磨makefile和shell的语法细节,再加上gcc编译选项的复杂性,总而言之,makefile+shell+gcc用好了也能写出简洁的Makefile脚本完成复杂的编译任务。当遇到用不好的情况,要去解决makefile错误信息简直就是一个灾难。
因此,针对常见的使用场景(1、当前目录下多个测试代码片段的demo程序。2、当前目录是算法代码,需要生成库和测试程序),编写了2个万能脚本,再增加代码文件也基本不用修改makefile脚本文件。通过这2个脚本能熟练掌握makefile的基础知识,即使不用,也可以用作查找问题时的一个参考模板。构建万能makefile五部曲结构:设置编译器、指定代码-输出目标、all完成编译过程、clean清除生成文件、dist发布版本。
代码下载地址:
https://gitcode.net/openliu/devtools/-/tree/master/Makefile
A
makefile for demos
编译命令:
make clean;make
make clean;make CROSS_COMPILE=armv7a-linux-androideabi28
make clean;make CROSS_COMPILE=aarch64-linux-android28
make clean;make CROSS_COMPILE=arm-linux-gnueabihf
make clean;make CROSS_COMPILE=aarch64-linux-gnu
上述模板的缺点是不能分别指定不同的编译器或者编译选项,这时不用上述模板,直接把gcc编译命令写在makefile1文件即可,编译命令:make -f makefile1
B
makefile for library
编译命令:
make clean;make
make clean;make CROSS_COMPILE=armv7a-linux-androideabi28
make clean;make CROSS_COMPILE=aarch64-linux-android28
make clean;make CROSS_COMPILE=arm-linux-gnueabihf
make clean;make CROSS_COMPILE=aarch64-linux-gnu
make clean;make CROSS_COMPILE=none
C
开发&测试环境
编译环境信息:
audio@ubuntu:~/$ getconf LONG_BIT
64
audio@ubuntu:~/$ uname -a
Linux ubuntu 5.4.0-122-generic #138~18.04.1-Ubuntu SMP Fri Jun 24 21:14:03 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
运行环境信息:
console:/ # getconf LONG_BIT
32
console:/ # uname -a
Linux localhost 5.4.225-gc4839768cf9b-dirty #1 SMP PREEMPT Thu May 19 21:34:52 UTC 2023 armv8l