make/CMake(C C++),Grunt/Gulp(前端Web),GYP/GN等自动化构建工具

  build叫做构建,compile叫做编译。
  构建工具有很多种 :成熟大型项目常用的make ,Android平台开发应用的gradle ,人工智能TensorFlow的bazel。
> GNU make;CMake
构建工具GNU make- https://blog.csdn.net/hawks93/article/details/79444229
GNU make和co最流行的自动化构建工具之一- https://www.gnu.org/software/make/ (GNU Make)
  GNU make命令用于在Linux和类Unix系统上维护,编译和构建程序。Linux项目自动化构建工具——make/Makefile。
默认情况下,TEXT文件名为Makefile。Make有很多克隆和重写。以下是一些热门选项:
1、BSD make - FreeBSD / NetBSD / OpenBSD很受欢迎。
2、make - 经典的Unix构建工具。
3、SunPromake - Solaris Unix构建工具。
4、GNU Make - Linux、OS X、* BSD的make标准实现。

  CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。
  通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile不仅可以通过make命令构建项目生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者ctest)、生成当前平台的安装包(make package)、生成源码包(make package_source)、产生Dashboard显示数据并上传等高级功能,只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能,包括写测试用例。

make是一个构建工具,我们要书写Makefile文件,才能让这个工具按照规则执行.如果是有ROM工作经验的工程师一定用过make snod这条命令.它会重新打包生成system.img。
  make是如何工作的,在默认的方式下,也就是只输入make命令,则:
 1)make会在当前目录下找名字叫Makefile的文件
 2)如果找到,它会找文件中第一个目标文件,在上述例子中,它会找到hello这个文件,并将其作为最终的目标文件
 3)如果hello文件不存在,或是hello所依赖的后面的hello.o文件的修改时间要比hello这个文件新,那么,它就会执行后面所定义的命令来生成hello这个文件
 4)如果hello所依赖的hello.o文件不存在,那么make会在当前文件中找目标为hello.o文件的依赖性,如果找到则再根据那一个规则生成hello.o文件
 5)当然,你的C文件和H文件是存在的,于是make会生成hello.o文件,然后再用hello.o文件声明make的终极任务,也就是执行文件hello
 6)这就是整个make的依赖性,make会一层又一层的去找文件的依赖关系,直到最终编译出第一个目标文件
 7)在寻找的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出并报错,而对于所定义的命令的错误,或是编译不成功,或是make根本不理会
 8)make只管文件的依赖性,即:如果在找了依赖关系后,毛好后面的文件还是不存在,那么它就不工作了
 9)工程是要被清理的
 10)像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令不会被自动执行,不过,我们可以显示要make执行,即命令:make clean,以此来清除所有目标文件,以便重新编译
 11)一般我们要clean的目标文件,我们将它设置为伪目标,用.PHONY修饰,伪目标的特性是总是被执行的

-- make在Android平台的运用:
  为了加快AOSP项目的编译速度,Android团队在N版本添加了ninja构建工具,ninja构建工具相对于make构建工具更底层。通过开源项目kati(kati是项目名,但是最终编译生成的程序名却是叫做ckati,后续我们将使用ckati这个名字)将Makefile文件翻译成ninja文件。make和ninja的关系就像cmake和make。还有一点要注意的,由于7.1以后部分使用的是Soong+Buleprint这套构建工具,将bp文件转换成ninja文件,所以Makefile文件和Buleprint文件是混合使用的,分析Makefile文件要小心一点。不过Blueprint+Soong这套构建工具代替make、kati这套构建工具只是时间问题。

> Rake
  Rake 类似make的自动化构建工具- https://github.com/ruby/rake
  Rake是一个免费开源的自动化构建工具,是一个类似于Make的工具,是用Ruby语言创建的。程序员可使用Ruby语法指定所有构建任务和deps。它使用Rakefiles的TEXT文件构建软件,Rake存在于Ruby 1.9及以上版本中。

> Grunt/Gulp(前端Web)
  -- Grunt 可用于前端Web开发的构建工具- http://gruntjs.com/
Grunt被Java前端开发的程序员当做Java任务运行管理器。可使用Gruntfile进行单元测试,代码简化,编译等。
  -- Gulp.js 用于前端Web开发的构建工具- http://gulpjs.com/
gulp.js是一个免费开源的Java工具包,主要作为前端Web开发的构建工具。

> 谷歌开发的构建工具GYP/GN
 -- GYP- http://code.google.com/p/gyp/

  GYP(Generate Your Projects)是由 Chromium 团队开发的跨平台自动化项目构建工具,Chromium 便是通过 GYP 进行项目构建管理。为什么要选择 GYP,而放弃 CMake 呢?功能上 GYP 和 CMake 很是相似,在我看来,它们的最大区别在于配置文件的编写方式和其中蕴含的思想。

  编写 CMake 配置文件相比 Autotools 来说已经简化很多,一个最简单的配置文件只需要写上源文件及生成类型(可执行文件、静态库、动态库等)即可。对分支语句和循环语句的支持也使得 CMake 更加灵活。但是,CMake 最大的问题也是在这个配置文件,编写 CMake 配置文件是一种线性思维,对于同一个目标的配置可能会零散分布在各个地方。而 GYP 则相当不同,GYP 的配置文件更多地强调模块化、结构化。所以说GYP代替CMake也是有其原因的。
  -- GN:谷歌最新构建工具

GN比GYP速度快20倍,而且简单,所以谷歌就把GYP标注为过期,相关项目都迁到GN上来。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值