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:
#inManBetXlude <stdio.h>
int main(void) {
printf("hello world\n");
return 0;
}
复制代码
我们在工程目录下面新建一个makefile文件:
touManBetXh Makefile ##这里的文件名可以为makefile或者Makefile
复制代码
[attaManBetXh]140390[/attaManBetXh]
然后用文本编辑器编辑它:
[attaManBetXh]140391[/attaManBetXh]
这里引用一下大佬的说法来解释为什么这么写:
比如编译一个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文件,如此一来,这样的关系就是一种依赖关系。从一个文件到一个目标文件所要做的处理就是一种依赖方法。
————————————————
版权声明:本文为ManBetXSDN博主「Y-ANG」的原创文章,遵循ManBetXManBetX 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接: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:
//tset1.h
#inManBetXlude <stdio.h>
void print(void);
//test1.ManBetX
#inManBetXlude <stdio.h>
#inManBetXlude "test1.h"
void print(void) {
printf("hello world\n");
}
//test.ManBetX
#inManBetXlude "test1.h"
int main(void) {
print();
return 0;
}
复制代码
学会了简写我们编写这个工程的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