赞
踩
- 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力
- 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
- makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
- make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
- make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。
1.首先这里源代码:test.c
2.创建一个makefile/Makefile,这里大写小写都可以
3.用vim打开文件,在文件中操作(样例):
make一下编译
clean清理
这样就把mytest清理了。
解释:
第一行是依赖关系,mytest是目标文件,mytest后面跟的是依赖文件列表,如果有多个文件按照空格为分隔符;第二行是依赖方法,第二行开始必须是以一个tab开头;
运行make的时候,make会在当前目录找makefile,读取makefile中的内容。根据依赖关系知道你想用test.c形成mytest可执行程序,怎么形成的?根据你写的依赖方法形成。(make是默认从上往下进行推导的,只有make,默认生成第一个可执行文件)
.PHONY:(.PHONY:xxx,xxx对应的方法,总是要被执行的)
eg:接上面代码,我们使用两次make指令
第一次,成功生成可执行程序mytest
第二次,我们发现不能编译了,因为mytest是最新的,不用重新编译
如果就是想重新编译,那就使用.PHONY标记。
形成可执行程序我们确实期望如果源代码没有更新就没必要编译(这是为了提高编译的效率,makefile只需要对比可执行文件的最近修改时间和源文件最近的修改时间,谁更新就可以了,而PHONY的作用就是告诉makefile不要对比时间了,直接编译就行了)所以可执行程序一般不需要PHONY修饰,但清理项我们总是期望它被执行的,默认把clean用PHONY修饰。
clean:这一行特殊,可以为空不跟依赖文件;下面一行为依赖方法(rm)
这里带来三个新的符号,@指代目标文件,^指代依赖文件列表(^可以指代文件列表中的所有文件),$符号的作用,可以理解成占位符。我们make之后,test.exe对应替换掉@,test.c替换掉^。
makefile也是支持变量操作的:
这里的操作其实是类似于C语言的宏,如果一个项目里有很多地方要用到这个文件,那么这种写法将会更加的方便简洁,如果想更改目标文件和依赖文件,那么只用修改两个地方就行了。
不显示命令的makefile:
@符号不显示命令的执行过程,echo命令是打印一个字符串
这样执行就不显示命令,而是提示用户在做什么
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。