【STM32开发】win平台开源工具链开发STM32(三)工程管理工具Makefile

    科技2022-07-10  173

    摘要:

    到目前为止我们学习了编写程序用的工具、编译和下载程序用的工具,理论上来说现在已经能够进行STM32的开发了,但是还存在一个问题。用过Keil的读者应该知道,一个STM32工程里有很多的c源文件,如果没有一个工具来帮我们自动控制编译的话,那么编译命令就需要我们自己在命令行里输入,费时费力。本文将介绍编译管理工具Make,并示范如何使用Makefile控制多个c源文件的编译。


    一、Make和Makefile的关系

    使用Make工具的流程如下 1、编写Makefile 2、将Makefile提供给Make,Make会根据Makefile里的“说明”来有序地控制整个工程的编译。 Makefile是控制编译的一套“规则”,它说明了工程中源文件所在的位置和编译方式,Make则按照Makefile所描述的规则调用编译工具对工程进行编译,Make本身不具备编译功能,它只是调用Makefile里指定的编译器。

    二、Make在windows下的安装

    这里在安装Make的同时需要勾选gcc,以便在后面进行Makefile的练习。 【安装教程】

    三、Makefile入门

    Makefile的入门教程在网络上很容易找到,这里给出一个相对较好的教程 【跟我一起写Makefile】

    四、Makefile示例

    在进行本节示例前需要先确保电脑正确安装了gcc和Make,验证方法如下。

    gcc验证 按win+r,在弹出的窗口中输入cmd,唤出控制台,在控制台中输入gcc并回车,出现以下输出则表示gcc已正确安装:

    Make验证 同样在控制台中输入make并回车,如果出现以下输出则表示Make工具正确安装:

    编写测试用例 新建文件夹test,在test文件夹下新建main.c foo.c foo.h Makefile四个文件 文件内容如下

    foo.h

    #ifndef __FOO_H #define __FOO_H void foo(int num); #endif foo.c #include "foo.h" #inlcude <stdio.h> void foo(int num) { printf("[foo]->%d\n",num); } main.c #include <stdio.h> #include "foo.h" int main() { printf("[main]->test\n"); foo(100); return 0; }

    本例在foo.c中定义了一个函数,其功能是在屏幕上打印输入的数字。在main函数中调用foo()函数,输出提示信息。 接下来编写Makefile,这之前先理一遍这个测试工程的编译过程

    1、使用gcc编译main.c生成中间文件main.o 2、使用gcc编译foo.c生成中间文件foo.o 3、使用链接器ld链接main.o、foo.o,生成最终的输出文件main.exe

    按照这个流程编写的Makefile内容如下

    Makefile main.exe: main.o foo.o gcc main.o foo.o -o main foo.o: foo.c gcc -c foo.c -o foo.o main.o: main.c gcc -c main.c -o main.o

    从Makefile中可以看到书写顺序和处理流程是反的,即处理流程是从源文件到可执行文件,但Makefile的书写是从可执行文件一步步逆推到源文件。

    编译运行 打开控制台,使用cd命令进入到test文件夹所在位置,输入make并回车,编译结束后能看到生成了main.exe可执行文件和中间文件main.o、foo.o。 在控制台中输入main.exe并回车,运行测试程序。

    至此本节简要介绍了Make工具,编写了一个简单的Makefile用于指导生成可执行文件,Makefile还有更加复杂和灵活的语法,有兴趣的读者可自行寻找资料,深入了解。 文中若有不当或错误之处,欢迎读者提出建议。

    Processed: 0.010, SQL: 8