首页 > 其他分享 >关于项目编译工具ninja、make、cmake的区别与优劣

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

时间:2022-10-05 13:02:05浏览次数:88  
标签:文件 cmake make makefile 构建 ninja


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


ninja

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

其脚本文件后缀为 .ninja

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

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

​build​​​ 的语法是 ​​build output_file: rule_name input_files​

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的博客)


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的博客

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

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

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

​cmake_百度百科​

cmake快速入门_kavin.zhu的博客

标签:文件,cmake,make,makefile,构建,ninja
From: https://blog.51cto.com/u_13682052/5732516

相关文章