makefile学习之路——makefile简介

 

chengarm 关注 0人评论 25272人阅读 2018-03-19 00:01:30

一、make简介

make是一个指令工具,它解释makefile中的指令或者说规则。makefile文件描述了整个工程中所有文件的**编译顺序,编译规则**。Makefile也有自己的编写规则,通常,我们所使用的IDE都会生成相应的makefile,然后再根据makefile来进行编译,只是这些操作是由IDE来完成,我们只需要点击一个编译按钮。

 

二、为什么要使用make

现在可以在GitHub上看到,很多的开源项目,在编译的时候,都是使用make来完成的,也就是说,都有其对应的makefile。他们都有个特点,那就是文件很多。

考虑这样一种情况,我们的项目现在有三、四十个文件,你使用的不是IDE工具,而是命令行,那么不同的人,在编译你的项目的时候,都需要一个一个文件的


gcc -o asample.c bsample.c ...... xxx.out

,这样慢慢的一个文件,一个文件的去找到以后再编译吗?

答案肯定是否定的,当你工程的文件多了以后,时间一长,可能你自己都不能记住所有的文件。所以,这个时候我们就可以使用make来根据makefile对整个项目进行管理。除此之外,make还有一个优点,那就是当你修改你的文件以后,make只会编译更新的文件以及它相关依赖的文件。这里后边进行详细的解释,意思就是,当你只修改了几十个文件中的某一个文件时,make只会重新编译跟你修改的文件有关联的文件,而不是所有的文件。这就大大的减短了编译的时间。

 

 

三、makefile简介

在我们执行make之前,需要有一个名为makefile或Makefile的文件。这个文件用来告诉make需要完成什么样的操作。我们可以简单的把makefile认为是一份定义了源文件间依赖关系、如何编译各个源文件并生成可执行文件的说明书。

 

四、makefile的基本结构


TARGET... : PREREQUISITES...
    COMMAND
    ...
    ...

TARGET:规则的目标,最终生成文件的名字或者是中间过程文件名,也可以是make执行的动作的名称。

PREREQUISITES:规则的依赖,生成目标所必须的文件名列表。

COMMAND:规则的命令。规则需要执行的动作

        注意:这里需要注意的是,命令前面使用的是TAB键,而不是空格,使用空格会出现错误。

 

 

五、第一个makefile

        makefile文件内容如下


hello : 
    echo "hello makefile"
test : 
    echo "test"
    pwd
    ls

 

执行结果如图所示

image.png

        从图中可以看到,我们执行make时,打印了echo "hello makefile"hello makefile两句话。使用make hello的结果跟make相同,而使用make test,的打印结果,则与前面两者不同。

        为什么会是这样呢?

        因为make在执行时,如果没有参数,那么就会首先执行第一个规则,而make hellomake test则是执行对应目标下的规则,所有,虽然makemake hello的结果是相同的,但是实际上,两者的意义还是有区别的。

 

 

飞思卡尔智能车竞赛是一项备受关注的科技赛事,旨在激发学生的创新和实践能力,尤其是在嵌入式系统、自动控制和机器人技术等关键领域。其中的“电磁组”要求参赛队伍设计并搭建一辆能够自主导航的智能车,通过电磁感应线圈感知赛道路径。本压缩包文件提供了一套完整的电磁组智能车程序,这是一套经过实战验证的代码,曾在校级比赛中获得第二名的优异成绩。 该程序的核心内容可能涉及以下关键知识点: 传感器处理:文件名“4sensor”表明车辆配备了四个传感器,用于获取环境信息。这些传感器很可能是电磁感应传感器,用于探测赛道上的导电线圈。通过分析传感器信号的变化,车辆能够判断自身的行驶方向和位置。 数据采集与滤波:在实际运行中,传感器读数可能受到噪声干扰,因此需要进行数据滤波以提高精度。常见的滤波算法包括低通滤波、高斯滤波和滑动平均滤波等,以确保车辆对赛道的判断准确无误。 路径规划:车辆需要根据传感器输入实时规划行驶路径。这可能涉及PID(比例-积分-微分)控制、模糊逻辑控制或其他现代控制理论方法,从而确保车辆能够稳定且快速地沿赛道行驶。 电机控制:智能车的驱动通常依赖于直流电机或无刷电机,电机控制是关键环节。程序中可能包含电机速度和方向的调节算法,如PWM(脉宽调制)控制,以实现精准的运动控制。 嵌入式系统编程:飞思卡尔智能车的控制器可能基于飞思卡尔微处理器(例如MC9S12系列)。编程语言通常为C或C++,需要掌握微控制器的中断系统、定时器和串行通信等功能。 软件架构:智能车软件通常具有清晰的架构,包括任务调度、中断服务程序和主循环等。理解和优化这一架构对于提升整体性能至关重要。 调试与优化:程序能够在比赛中取得好成绩,说明经过了反复的调试和优化。这可能涉及代码效率提升、故障排查以及性能瓶颈的识别和解决。 团队协作与版本控制:在项目开发过程中,团队协作和版本控制工具(如Git)的应用不可或缺,能够保
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值