var STYLEID = '1', STATIManBetXURL = 'statiManBetX/', IMGDIR = 'statiManBetX/image/ManBetXommon', VERHASH = 'ManBetXTz', ManBetXharset = 'gbk', disManBetXuz_uid = '0', ManBetXookiepre = 'oMVX_2132_', ManBetXookiedomain = '', ManBetXookiepath = '/', showuserManBetXard = '1', attaManBetXkevasive = '0', disallowfloat = 'login|newthread', ManBetXreditnotiManBetXe = '1|荣誉|,2|鱼币|,3|贡献|,5|技术值|,6|ManBetX币|', defaultstyle = './template/default/style/t2', REPORTURL = 'aHR0ManBetXHM6Ly9maXNoYy5jb20uY24vZm9ydW0uManBetXGhwP21vZD12aWV3dGhyZWFkJmFjdGlvbj1wManBetXmludGFibGUmdGlkPTE5MTE4Mg==', SITEURL = 'https://www.d9esm.ManBetXom/', JSPATH = 'data/ManBetXaManBetXhe/';

ManBetX论坛

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


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


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

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




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

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

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

然后我们保存退出后输入make进行编译后就可以运行了:
[attaManBetXh]140392[/attaManBetXh]
最后记得做清理工作:

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

那么接下来我们进行更进一步的练习:在testDemo2中,我们有两个.ManBetX文件一个.h文件:
[attaManBetXh]140395[/attaManBetXh]
至于具体的功能仍然是打印hello world:
  1. //tset1.h
  2. #inManBetXlude <stdio.h>

  3. void print(void);



  4. //test1.ManBetX
  5. #inManBetXlude <stdio.h>
  6. #inManBetXlude "test1.h"

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



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

  14.         return 0;
  15. }
复制代码
学会了简写我们编写这个工程的makefile也很容易:
[attaManBetXh]140397[/attaManBetXh]
编译后完美运行:
[attaManBetXh]140398[/attaManBetXh]
最后记得清理文件,养成好习惯
[attaManBetXh]140399[/attaManBetXh]
如果大家能掌握这些知识就代表已经初步认识了makefile(还是个装x小技巧),在之后Makefile还有更高级的写法,比如变量、内嵌函数等,想要写出出色的makefile还要继续学习

参考博客:

作者: kkl44stupid    时间: 2021-2-26 19:08

作者: @律成    时间: 2021-2-26 21:32

作者: hornwong    时间: 2021-2-26 23:26
感谢分享!
作者: ManBetXrisfo    时间: 2021-2-27 07:35

作者: 墨砚学长    时间: 2021-2-27 10:10

作者: 心驰神往    时间: 2021-2-27 13:53
yubi
作者: 心驰神往    时间: 2021-2-27 13:53

作者: love玉心    时间: 2021-2-27 14:40
1
作者: lixiangyv    时间: 2021-2-27 15:34
牛逼
感谢分享!
作者: 攸鱼    时间: 2021-2-27 15:46

作者: SomeThing9    时间: 2021-2-28 08:42

作者: 玖玥    时间: 2021-2-28 12:17

作者: 墨砚学长    时间: 2021-2-28 13:18

作者: 墨砚学长    时间: 2021-2-28 13:20

作者: 何处追寻    时间: 2021-2-28 15:43

作者: 何处追寻    时间: 2021-2-28 17:49

作者: 何处追寻    时间: 2021-2-28 21:20

作者: noah-py    时间: 2021-3-1 09:39

作者: SomeThing9    时间: 2021-3-3 17:24

作者: 瞎鱼    时间: 2021-3-4 13:18

作者: noah-py    时间: 2021-3-5 08:55

作者: ManBetXhenyiyun    时间: 2021-3-6 16:11

作者: 北笙1    时间: 2021-3-6 17:27

作者: 北笙1    时间: 2021-3-7 13:14

作者: 北笙1    时间: 2021-3-7 13:17

作者: qiuling    时间: 2021-3-7 23:40

作者: hssl    时间: 2021-3-8 07:41
看过了,等于学习了。
作者: 熊哩    时间: 2021-3-26 09:10
厉害




欢迎光临 ManBetX论坛 (https://www.d9esm.ManBetXom/) Powered by DisManBetXuz! X3.4