makefile可谓是做嵌入式大型工程中,比较重要的一环。当C工程中代码量、目录结构,逐渐增多的时候,掌握makefile的使用,对编译大型工程可谓是益处多多。
刚接触makefile的时候,仅从文字学习makefile语法可能略微干涩,本文通过一个小型C语言工程,配合多级目录下的makefile文件,实现对该工程的编译。
直接展示C工程的目录结构以及相对应的文件,如下:
(工程代码目录)
工程包括fun1(实现加法)、fun2(实现减法)、fun3(实现乘法)、fun4(实现除法)、以及main(主函数调用) ,编译结果输出到output文件夹,hexbin文件存放编译运行程序,objects存放编译各文件生成的.o文件。
在main文件夹中的makefile,添加定义变量设置demo程序的版本号:
在main.c文件中,调用makefile定义的版本号,以及其他fun1-4下的函数api:
在根目录下,执行"make"编译:
(makefile输出编译信息)
makefile脚本中控制输出结果以及保存的路径。
切换到output/hexbin目录下,执行./appDemo.exe 7 3输出测试程序如下:
(代码运行结果)
至此,一个完整的流程,从代码编写、makefile层级编写,到编译结果的输出保存以及运行。下面,将详细列出该工程中所需要的文件,刚接触makefile时可以参考借鉴。
在每个层级目录下,比如fun1、fun2等文件夹,makefile都是相同的,也就是工程文件随着目录结构增加,仅需将makefile拷贝复制,酌情修改即可。
代码介绍:
fun1下:
func1.c
func1.c
test_func1_app.c
test_func1_app.c
fun1下的makefile(其中fun1、fun2、fun3、fun4的makefile完全一样)
fun1-makefile
main文件夹下的makefile略有不同,比如我们定义了SOFTWARE_APP_VERSION版本号,但绝大多数都是和fun1下是相同的。
main-makefile
output文件夹下的makefile:
output-makefile
最外层的makefile,控制了很多输出,比较重要,如下:
top-makefile
顶层makefile,定义了编译器,以及如何进出各层级目录,输出结果保存,以及make clean清除的控制。
makefile的功能比较强大,通过一个小型的工程代入学习,从实践中,不断探索makefile的各种语法,在面对大型C工程的时候,也可以做到随遇而安。
,