当前位置:   article > 正文

Linux项目自动化构建工具-make/Makefile

Linux项目自动化构建工具-make/Makefile

背景

  • 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力
  • 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
  • makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
  • make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
  • make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

 1.一个样例

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)


 2.不一样的写法

这里带来三个新的符号,@指代目标文件,^指代依赖文件列表(^可以指代文件列表中的所有文件),$符号的作用,可以理解成占位符。我们make之后,test.exe对应替换掉@,test.c替换掉^。

makefile也是支持变量操作的:

这里的操作其实是类似于C语言的宏,如果一个项目里有很多地方要用到这个文件,那么这种写法将会更加的方便简洁,如果想更改目标文件和依赖文件,那么只用修改两个地方就行了。

不显示命令的makefile:

@符号不显示命令的执行过程,echo命令是打印一个字符串

这样执行就不显示命令,而是提示用户在做什么

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/112229
推荐阅读
相关标签
  

闽ICP备14008679号