当前位置: 首页 > 工具软件 > Ninja-IDE > 使用案例 >

关于项目编译工具ninja、make、cmake的区别与优劣

洪永长
2023-12-01

ninja和make都是通过脚本语言指定编译规则,然后调用gcc等编译器实现自动化编译,过程中会通过文件时间戳来进行增量构建。


ninja

Ninja 是Google的一名程序员推出的注重速度的构建工具Ninja 是一个专注于速度的小型构建系统。最初是为了对chromium、Swift等进行快速编译构建。设计哲学是通过包含描述依赖关系图的方式提供快速的构建。

其脚本文件后缀为 .ninja

ninja 构建文件的语法:创建一个 rule 和一个 build。

rule 有一个命令(command)和描述(description)参数(描述只是给人看的,所以你可以知道它在构建你的代码时在做什么)。

build 的语法是 build output_file: rule_name input_files

下面举个例(来自 ninja:一个简单的构建方式 | Linux 中国 - 知乎):

rule svg2pdf
  command = inkscape $in --export-text-to-path --export-pdf=$out
  description = svg2pdf $in $out
build pdfs/variables.pdf: svg2pdf variables.svg


make

其脚本文件后缀为 .makefile

这个语法网上资料太多了,就不举例了。功能非常强大,具有各种高级功能,比如函数、内置规则。可以看我之前写的这个文章(C语言工程的通用makefile模板(干货!!!)_标biao的博客-CSDN博客_makefile通用模板


ninja 和 make 的优劣

Ninja 舍弃了各种高级功能,语法和用法非常简单,给它指定好了具体详细要做什么,所以启动编译的速度非常快。根据 [Chromium](http://neugierig.org/software/chromium/notes/2011/02/ninja.html) 的实际测试:在超过 30,000 个源文件的情况下,也能够在1秒钟内开始进行真正的构建。与之相比,通过资深工程师进行编写的 Makefiles 文件也需要10-20秒才能开始构建。但是ninja的功能可能不如makefile强大。

原则上,如果你对自己的项目构建速度感觉满意,就不要用 Ninja,用makefile就行了,功能强大。

cmake

而cmake是一个生成 .ninja 和 .makefile 的工具。因为担心很多人不熟悉makefile文件和ninja文件的写法,所以cmake只需要用户通过对源码文件的简单描述(就是CMakeLists.txt文件),就能自动生成一个project的makefile文件或者ninja文件,然后就可以通过ninja或者make进行启动编译了,很多IDE都在用cmake作为项目管理工具。

参考文章:

ninja VS cmake_lincong-pro的博客-CSDN博客_cmake ninja

ninja:一个简单的构建方式 | Linux 中国 - 知乎

https://www.slant.co/topics/4263/versus/~ninja_vs_cmake_vs_gnu-make

为速度而生的构建系统 - Ninja - 腾讯云开发者社区-腾讯云

cmake_百度百科

cmake快速入门_kavin.zhu的博客-CSDN博客_cmake

 类似资料: