鱼C论坛

 找回密码
 立即注册
查看: 2910|回复: 28

[技术交流] 【萌新向】简单makefile

[复制链接]
发表于 2021-2-26 18:51:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
作为一个Linux的(假)用户,平常在写代码的时候除了吐槽vi邪教外另外一直心心念念的一点就是makefile了,只有学会了makefile的编写才可以被成为linux程序员,可是因为懒所以一直没去学,今天因为实在不知道去干什么于是就百度了一下如何写makefile,然后学习了一点东西就来向大家分享一下(其实就是想水贴),涉及的内容很简单所以标题说是简单Makefile(真是简单到不能再简单了),大家见谅哈
首先介绍一下什么是makefile,一些在windows环境下学习c/c++的朋友可能没有听过,在这里我也不班门弄斧了直接放一下百度百科的介绍:
        一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令


简单点说就是你可以通过编写makefile来规定一个工程的编译顺序和规则,做到大家用ide编译然后执行一样的效果,只不过用ide编译时系统让你省下了写makefile的功夫,那么废话不多说直接上教程:


首先我们先尝试为只有一个源文件的工程编写makefile,这个工程中有一个名为test.c的文件,编译后程序会输出hello world:
  1. #include <stdio.h>

  2. int main(void) {
  3.         printf("hello world\n");        
  4.         return 0;
  5. }
复制代码




我们在工程目录下面新建一个makefile文件:

  1. touch Makefile       ##这里的文件名可以为makefile或者Makefile
复制代码

6[JAOWYSKZZ8PGNLL~TDX3W.png
然后用文本编辑器编辑它:
F2EJP7`D7ZB1L[47C4ZY)0V.png
这里引用一下大佬的说法来解释为什么这么写:
  1. 比如编译一个test.c文件到可执行程序test需要经过预处理、编译、汇编、文本链接四个步骤,每次得到的文件是:test.i,test.s,test.o,test。理解依赖关系我们可以反着来看程序的编译过程,也就是说,要得到test文件要依赖于test.o文件,而得到test.o依赖于test.s,得到test.s要依赖于test.i,同样要得到test.i要依赖于test.c文件,如此一来,这样的关系就是一种依赖关系。从一个文件到一个目标文件所要做的处理就是一种依赖方法。
  2. ————————————————
  3. 版权声明:本文为CSDN博主「Y-ANG」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
  4. 原文链接:https://blog.csdn.net/qq_33951180/article/details/53975760
复制代码
20170102101153076.png

然后我们保存退出后输入make进行编译后就可以运行了:
DLE}I4@C){R_}XL)%)MAA0E.png
最后记得做清理工作:

H$K]ZX2IE[22F6U$M%SI8AQ.png
(这里不要问我为啥把可执行文件也清理了,因为之前学习的时候我看不少博主都会在最后把可执行文件删掉,就有样学样了
这是可能有同学要说了,要执行的步骤太多了,一个两个文件还好,如果有好多个文件那得有多麻烦。正所谓懒是人类进步的阶梯,所以大家可以使用简写来完成这些工作:
I7BRXEM`JUQ(J4RZUJ1K`2K.png
其实大家平常直接用gcc编译就是这样的步骤,我觉得上面的写法重在理解大于实用。

那么接下来我们进行更进一步的练习:在testDemo2中,我们有两个.c文件一个.h文件:
FLZJG42)[Y71X%{SN$S]$VU.png
至于具体的功能仍然是打印hello world:
  1. //tset1.h
  2. #include <stdio.h>

  3. void print(void);



  4. //test1.c
  5. #include <stdio.h>
  6. #include "test1.h"

  7. void print(void) {
  8.         printf("hello world\n");
  9. }



  10. //test.c
  11. #include "test1.h"
  12. int main(void) {
  13.         print();

  14.         return 0;
  15. }
复制代码
学会了简写我们编写这个工程的makefile也很容易:
LB4H[ACC`%P}}ULP{)PKM.png
编译后完美运行:
K9Q3B5]S34X0GR7}HEY{L3F.png
最后记得清理文件,养成好习惯
R{3PZ]N0]5%Y]Z}`%{F{`J1.png
如果大家能掌握这些知识就代表已经初步认识了makefile(还是个装x小技巧),在之后Makefile还有更高级的写法,比如变量、内嵌函数等,想要写出出色的makefile还要继续学习

参考博客:https://blog.csdn.net/qq_33951180/article/details/53975760
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-2-26 19:08:13 | 显示全部楼层

回帖奖励 +2 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-2-26 21:32:13 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-2-26 23:26:28 | 显示全部楼层

回帖奖励 +2 鱼币

感谢分享!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-2-27 07:35:32 | 显示全部楼层

回帖奖励 +2 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-2-27 10:10:07 | 显示全部楼层

回帖奖励 +2 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-2-27 13:53:19 | 显示全部楼层
yubi
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-2-27 13:53:52 | 显示全部楼层

回帖奖励 +2 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-2-27 14:40:46 | 显示全部楼层

回帖奖励 +2 鱼币

1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-2-27 15:34:56 | 显示全部楼层

回帖奖励 +2 鱼币

牛逼
感谢分享!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-2-27 15:46:11 | 显示全部楼层

回帖奖励 +2 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-2-28 08:42:29 | 显示全部楼层

回帖奖励 +2 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-2-28 12:17:49 | 显示全部楼层

回帖奖励 +2 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-2-28 13:18:53 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-2-28 13:20:31 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-2-28 15:43:11 | 显示全部楼层

回帖奖励 +2 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-2-28 17:49:43 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-2-28 21:20:07 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-3-1 09:39:30 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2021-3-3 17:24:49 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1

GMT+8, 2023-2-9 10:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表