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

摘要:

到目前为止我们学习了编写程序用的工具、编译和下载程序用的工具,理论上来说现在已经能够进行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已正确安装:
    gcc验证

  • Make验证
    同样在控制台中输入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"
#include <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还有更加复杂和灵活的语法,有兴趣的读者可自行寻找资料,深入了解。
文中若有不当或错误之处,欢迎读者提出建议。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值