马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
作为一个Linux的(假)用户,平常在写代码的时候除了吐槽vi邪教外另外一直心心念念的一点就是makefile了,只有学会了makefile的编写才可以被成为linux程序员,可是因为懒所以一直没去学,今天因为实在不知道去干什么于是就百度了一下如何写makefile,然后学习了一点东西就来向大家分享一下(其实就是想水贴),涉及的内容很简单所以标题说是简单Makefile(真是简单到不能再简单了),大家见谅哈
首先介绍一下什么是makefile,一些在windows环境下学习c/c++的朋友可能没有听过,在这里我也不班门弄斧了直接放一下百度百科的介绍:
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令
简单点说就是你可以通过编写makefile来规定一个工程的编译顺序和规则,做到大家用ide编译然后执行一样的效果,只不过用ide编译时系统让你省下了写makefile的功夫,那么废话不多说直接上教程:
首先我们先尝试为只有一个源文件的工程编写makefile,这个工程中有一个名为test.c的文件,编译后程序会输出hello world:#include <stdio.h>
int main(void) {
printf("hello world\n");
return 0;
}
我们在工程目录下面新建一个makefile文件:
touch Makefile ##这里的文件名可以为makefile或者Makefile
然后用文本编辑器编辑它:
这里引用一下大佬的说法来解释为什么这么写:比如编译一个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文件,如此一来,这样的关系就是一种依赖关系。从一个文件到一个目标文件所要做的处理就是一种依赖方法。
————————————————
版权声明:本文为CSDN博主「Y-ANG」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_33951180/article/details/53975760
然后我们保存退出后输入make进行编译后就可以运行了:
最后记得做清理工作:
(这里不要问我为啥把可执行文件也清理了,因为之前学习的时候我看不少博主都会在最后把可执行文件删掉,就有样学样了)
这是可能有同学要说了,要执行的步骤太多了,一个两个文件还好,如果有好多个文件那得有多麻烦。正所谓懒是人类进步的阶梯,所以大家可以使用简写来完成这些工作:
其实大家平常直接用gcc编译就是这样的步骤,我觉得上面的写法重在理解大于实用。
那么接下来我们进行更进一步的练习:在testDemo2中,我们有两个.c文件一个.h文件:
至于具体的功能仍然是打印hello world://tset1.h
#include <stdio.h>
void print(void);
//test1.c
#include <stdio.h>
#include "test1.h"
void print(void) {
printf("hello world\n");
}
//test.c
#include "test1.h"
int main(void) {
print();
return 0;
}
学会了简写我们编写这个工程的makefile也很容易:
编译后完美运行:
最后记得清理文件,养成好习惯
如果大家能掌握这些知识就代表已经初步认识了makefile(还是个装x小技巧),在之后Makefile还有更高级的写法,比如变量、内嵌函数等,想要写出出色的makefile还要继续学习
参考博客:https://blog.csdn.net/qq_33951180/article/details/53975760
|