码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 关于项目编译工具ninja、make、cmake的区别与优劣


    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 中国 - 知乎):

    1. rule svg2pdf
    2. command = inkscape $in --export-text-to-path --export-pdf=$out
    3. 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

  • 相关阅读:
    C专家编程 第6章 运动的诗章:运行时数据结构 6.3 操作系统在a.out文件里干了些什么
    wifi ping延时大的问题
    linq to sql性能优化技巧
    每天五分钟机器学习:函数间隔与几何间隔以及平行和重合的问题
    健身房信息管理系统/健身房管理系统
    计算机毕业设计Python+djang的药物管理系统
    测试人员常用借口,你中标了吗?
    spring源码之下载及构建
    为什么postman不会有跨域问题
    基于lstm DNN的多变量单变量时间预测项目-完整数据+代码
  • 原文地址:https://blog.csdn.net/kangkanglhb88008/article/details/125894112
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号