0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是makefile?为什么需要用makefile?

学益得智能硬件 来源:学益得智能硬件 2024-03-06 16:32 次阅读

什么是makefile?为什么需要用makefile?

正常编译一个c文件,直接敲命令:

gcc hello.c -o hello
就行。

如果文件稍微多几个,gcc 里面多加几个问题也不大。

但是如果给你一个完整的项目工程,里面包含几千甚至几万个文件,而且又分成不同的文件夹,再去敲命令一个一个编译,显然有点不现实。

细心的同学会发现,凡是这些工程项目,里面都会有个叫Makefile的文件,要么这个文件直接存在,要么可以通过某种方式生成。

Makefile就是工程管理器,里面指定了本项目的编译规则。

先编译哪些,再编译哪些,要链接哪些库等等。

简单的Makefile确实挺简单,但是复杂的Makefile也很复杂。

下面来写个简单的Makefile。 假设现在只有一个源文件 hello.c。
root@turbo:~# ls
hello.c
root@turbo:~#
打开Makefile,先写目标文件,就是最终要生成的二进制,冒号后面写上依赖文件,就是通过哪个文件可以生成目标文件。
hello:hello.c
另起一行,先敲一下tab键,然后写编译的规则,就是我们平时敲的命令。
hello:hello.c
  gcc hello.c -o hello
执行Makefile,只要敲make就行,然后就能顺利编译。
make
再把文件增加两个。

Makefile中,目标文件不变,依赖文件以及下面编译规则都要增加两个文件。

这样确实麻烦了些。

Makefile里面也有变量一说,引用变量的时候,用 $ 符号。

有了变量,下次再增加什么文件,只要往后接就行。
Target=hello
Object=hello.cprint.c show.c
$(Target):$(Object)
  gcc $(Object) -o $(Target)
不过一般依赖文件也不写成 .c ,因为最终的可执行文件都是由汇编后的文件合成,也就是多个 .o 文件经过链接变成了可执行文件,所以这里一般写成 .o 。
Target=hello
Object=hello.oprint.oshow.o
$(Target):$(Object)
  gcc $(Object) -o $(Target)
那 .o 文件又怎么来,下面可以继续写由 .c 生成 .o ,不过Makefile里面有隐含规则,所以这几行可以不写。

make的时候,过程很清晰,先从.c 变成 .o 再把 .o 合成最终的可执行文件。
root@turbo:~# make
cc    -c -o hello.o hello.c
cc    -c -o print.o print.c
cc    -c -o show.o show.c
gcc hello.o print.o show.o -o hello
root@turbo:~#



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 二进制
    +关注

    关注

    2

    文章

    705

    浏览量

    41250
  • Makefile
    +关注

    关注

    1

    文章

    121

    浏览量

    19094

原文标题:如何写一个简单的Makefile

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Makefile中文教程 -下载

    Makefile中文教程,免费下载哦。
    发表于 03-25 08:57 66次下载

    教你写Makefile

    教你写Makefile 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,
    发表于 02-10 14:24 37次下载

    驾驭Makefile

    到项目中,需要的知识是线、甚至是面。这篇文章以helloworld作为开篇,接着是simple项目、complicated项目以及huge项目,一步一步的引入了Makefile中的概念,以及告诉你做一个实
    发表于 01-05 17:05 9次下载

    Makefile教程

    Linux开发必备的Makefile文件编译教本,讲解的很到位,新手基本上看上几天就可以上手了
    发表于 01-05 17:05 0次下载

    跟我一起学makefile

    关于makefile学习,深入了解嵌入式下makefile的编写
    发表于 05-23 18:21 0次下载

    驾驭makefile

    一本Makefile的经典教程,深入浅出,易学易懂
    发表于 06-17 16:16 9次下载

    Linux内核Makefile文件

    Makefile文件的详细编写过程
    发表于 08-28 09:25 14次下载

    linux makefile教程

     什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile
    发表于 11-12 09:11 4944次阅读

    windows平台下makefile操作教程

    Makefile一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件
    发表于 11-24 17:14 1.1w次阅读
    windows平台下<b class='flag-5'>makefile</b>操作教程

    Makefile是什么?Makefile工作原理是怎样的?Makefile经典教程免费下载

    Makefile的重要性 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make
    发表于 09-12 17:19 0次下载
    <b class='flag-5'>Makefile</b>是什么?<b class='flag-5'>Makefile</b>工作原理是怎样的?<b class='flag-5'>Makefile</b>经典教程免费下载

    嵌入式中的Makefile应用

    文章目录一.Makefile 引入二. Makefile语法1.通配符2.假象目标3.变量三.Makefile函数四.实例本文主要总结一下嵌入式开发中的Makefile,一般项目中都
    发表于 11-03 17:06 11次下载
    嵌入式中的<b class='flag-5'>Makefile</b>应用

    一个stm32的makefile分享

    工具链,以及openocd调试软件。硬件上需要一个jlink。如何使用这个makefile依赖于stm32标准外设库3.5.0版本建立工程​ 将从官网下载的外设库解压,新建一个工程文件夹,将解...
    发表于 12-16 16:58 14次下载
    一个stm32的<b class='flag-5'>makefile</b>分享

    MakefileMakefile与shell命令的联系

    博主最近在项目实践过程中,需要深度定制项目的Makefile,其中有些复杂的流程必须得借助shell脚本才能高效地完成,为此博主特意深入学习了在Makefile种调用shell命令的方法。
    的头像 发表于 07-11 09:06 2552次阅读
    【<b class='flag-5'>Makefile</b>】<b class='flag-5'>Makefile</b>与shell命令的联系

    Makefile】简单实用的Makefile模板来了

    【Linux + Makefile】简单实用的Makefile模板来了
    的头像 发表于 08-31 12:46 1643次阅读
    【<b class='flag-5'>Makefile</b>】简单实用的<b class='flag-5'>Makefile</b>模板来了

    Makefile可以做什么?Makefile的基本格式

    Makefile可以根据指定的依赖规则和文件是否有修改来执行命令。常用来编译软件源代码,只需要重新编译修改过的文件,使得编译速度大大加快。
    的头像 发表于 01-25 11:18 232次阅读