当前位置:网站首页>关于项目编译工具ninja、make、cmake的区别与优劣
关于项目编译工具ninja、make、cmake的区别与优劣
2022-07-21 00:35:00 【标biao】
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
边栏推荐
- AtomicInteger详解
- Qdu summer training first week limited time training 1
- [test development] software testing - Test Case Design & detailed explanation of test classification
- Haproxy+kept load balancing and high availability
- 架构实战营模块7作业
- isNotBlank()方法和isNotEmpty()方法的区别
- The most complete summary of MySQL data types in history - (first)
- Summary of the most complete MySQL data types in history (Part 2)
- Construction of combat battalion module 7 operation
- 动态内存管理
猜你喜欢
随机推荐
STM32F103 key control LED program
[Pinia source code] II. Source code analysis of definestore
PE文件结构详解
STM32F103实现LED呼吸灯程序
Haproxy+kept load balancing and high availability
[BJDCTF2020]EasySearch-1
esp8266学习导航贴
02_ UE4 advanced_ HP strip and blood deduction mechanism
leetcode:1125. The smallest necessary team [shape pressing DP board + set covering board]
视频36 13章
Be diligent in sharing foreign lead tasks
Yolox ---- human doubts!
小程序的破局之道,数字化营销已然成为趋势
【OpenCV】solvePnPRansac /solvePnP 计算外参数,求解相机位姿
Overview and deployment of redis (master-slave replication, sentinel mode, cluster)
More and more scenes and industries begin to be related to the metauniverse
gdb使用详细介绍
C语言并行程序编程(一)
Digital marketing has become a trend for small programs to break the situation
UE4 spring blueprint - survival development game