为什么会选择make,cmake之流来控制程序编译

选择make、cmake之流来控制程序编译是因为:1、为了跨平台;2、构建工具的生态;3、速度;4、需要很多控制。为了跨平台指假如使用 IDE,就需要分别为每个 IDE 重复配置。使用 cmake 工具,只需要写好配置一次,开发的时候根据开发人员的习惯来选择开发方式。

为什么会选择make,cmake之流来控制程序编译-Worktile社区

1、为了跨平台

不同的平台有不同的 IDE,比如同一个 C++ 工程,在 Windows 常用的 IDE 是 Visual Studio, Mac 平台的 IDE 是 Xcode。假如使用 IDE,就需要分别为每个 IDE 重复配置。使用 cmake 工具,只需要写好配置一次,开发的时候根据开发人员的习惯来选择开发方式。有些人在 Linux 平台选择 Vim 来开发;有些人习惯用 ,就生成 IDE 项目文件。Mac 平台开发人员就可以用 Xcode,Windows 平台开发人员可以使用 Visual Studio。发布时候,不用发布 IDE 的项目文件。每个平台都用相应的 cmake 来构建。

2、构建工具的生态

生态上说,以前 automake 是在一定程度上优于 cmake 的,但是还是要看谁站在后面。cmake 背后是有一个公司的,而且 KDE 后来选择使用 cmake,对于 cmake 的贡献是很大的。cmake 3 之后它的文件的范式其实也有所变化。automake 以前凭借着 pkg-config 的良好支持更胜一筹。但是现在越来越多的库意识到的一个问题就是,使用它并不是代表只是 link 它就完事了,而是经常需要调用一些这个库配套的 binary 来执行一些任务。这里就需要提供除了仅仅是找库之外的一些 macro/script 来供开发者使用。例如 KDE / Qt 就需要使用 moc,qdbus2cppxml 之类的 binary。CMake 社区提供 find_package 使用的 file 的趋势也是使用新的范式,不是直接手写 include_directories , library_directories target_link_libraries 的路径,而是通过包装好的 target 把外部库也抽象为一个 target 并且把路径依附于这个 target 上。对于大项目来说,有些项目需要使用 third_party 静态链接或者动态链接,这样管理起来的话,静态链接动态链接都可以统一管理。相比 python,C/C++ 社区是更青睐于 cmake 的,其他许多有跨平台需求的重量级项目 boost,llvm 都是使用 cmake 进行构建。毕竟 python 并不原生提供构建系统,你在构建前要先装 python,再装一个 scons 什么的。而对于 autotools, cmake 来说你只需要 cmake,还是节省了工作量的。

3、速度

速度对于小项目来说可能不重要,但是对于大项目来说真的非常重要。对于 automake 的一个批评就是它太慢,configure 一圈下来因为历史因素检查了许许多多奇怪的地方。m4 宏也慢。这是许多项目从 automake 转向 cmake 的一个理由。而对于很多语言来说,速度实在是比不上。

4、需要很多控制

让同一份代码,根据不同的情况、不同的平台、编译出不同的版本。比如可以选择编译成静态库和动态库,是否需要 WebKit 功能,是否需要界面,是否需要支持特定的硬件等等。这些控制,使用 IDE 也很难做得。

延伸阅读:

什么是cmake?

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。

CMake 可以编译源代码、制作程序库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。CMake 支持 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake 也支持静态与动态程式库的建构。

“CMake”这个名字是“cross platform make”的缩写。虽然名字中含有“make”,但是CMake和Unix上常见的“make”系统是分开的,而且更为高阶。

文章标题:为什么会选择make,cmake之流来控制程序编译,发布者:小编,转载请注明出处:https://worktile.com/kb/p/35942

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编小编认证作者
上一篇 2023年1月27日 下午8:01
下一篇 2023年1月27日 下午8:04

相关推荐

  • MySQL的数据存储与查找的原理是什么

    MySQL的数据存储和查找是基于InnoDB存储引擎和B+树数据结构实现的。在存储数据时,InnoDB使用聚簇索引将数据行的实际数据存储在B+树的叶子节点中,从而提高了查询效率;在查找数据时,MySQL使用SQL语句生成查询计划,并通过B+树索引获取数据。 MySQL的数据存储和查找是基于InnoD…

    2023年5月29日
    47100
  • 如何编写公司管理制度

    编写公司管理制度关键性步骤涉及:1、确定制度编写的目标与原则、2、进行全面的需求分析、3、制定详细的编写计划、4、设计制度架构、5、起草制度内容、6、征求反馈与修改、7、确保制度的合规性、8、宣传培训与实施。 其中,*设计制度架构* 对于保证管理制度的有效性与可操作性尤为关键。 一、明确制度编写动机…

    2024年1月9日
    18900
  • 考试devops是什么

    DevOps一词意味着开发与运维的融合、1、通过实现工程、工具与文化实践的变革,目的在于缩短软件开发周期、2、提升交付频率与质量,同时不牺牲系统稳定性、3、增强组织间协作效率。在此,仔细探索第二点,提升交付频率与质量强调的是连贯性发布管道(CI/CD)的重要性,允许自动化测试与部署,确保软件在每次更…

    2024年3月26日
    5600
  • 有什么好的每天计划的软件

    本文将详细介绍几款好用的每天计划软件:1、Todoist;2、TickTick;3、Any.do;4、Google 日历;5、Trello。Todoist 是一款国际知名的任务管理软件,用户可以在 Todoist 中创建任务、设置提醒等。 1、Todoist Todoist 是一款国际知名的任务管理…

    2023年3月2日
    29200
  • LAN口和WAN口的区别是什么

    区别是:1、概念不同;2、作用不同;3、标注和数量不同;4、路由功能不同;5、设置不同。WAN是英文Wide Area Network的首字母所写,即代表广域网;而LAN则是Local Area Network的所写,即本地网(或叫局域网),它们的中文名称,分别是广域网端口和本地网端口;

    2023年2月14日
    2.7K00
  • devops软件开发用什么系统

    标题:DevOps软件开发中推荐使用的操作系统 摘要:DevOps实践中,选用合适的操作系统至关重要,关乎团队协作的高效与软件交付的速度。部分优选的操作系统有:1、Linux、2、Unix-like系统、3、Windows Server。Linux因其强大的定制能力、开源社区支持和高稳定性,成为De…

    2024年3月26日
    8000
  • 安卓和ios软件开发用什么编程语言

    安卓和iOS应用程序可以使用不同的编程语言进行开发。对于安卓应用程序开发,Java、Kotlin和C++是最常用的编程语言。对于iOS应用程序开发,Swift和Objective-C是必须使用的编程语言。选择适合您需求的编程语言非常重要,因为这将决定您开发应用程序的效率和质量。 安卓软件开发 安卓应…

    2023年2月28日
    1.9K00
  • ChatGPT在处理多语言文本时的性能如何

    摘要:ChatGPT在处理多语言文本时展现了强大的性能,主体答案在于它的多语言模型架构、大规模的多语种数据训练以及先进的算法优化技术。核心观点包括:1、多语言模型架构使得ChatGPT能够理解和生成多种语言的文本;2、通过海量多语种文本数据的训练,ChatGPT学习了不同语言之间的语义和文化差异;3…

    2023年11月28日
    30300
  • web物联网系统开发有哪些应用

    web物联网系统开发的应用:1、收集和处理大量数据;2、动态UI体验;3、聊天机器人集成与创意用户互动;5、实时支持和网络安全;6、对移动平台的深入支持;7、物联网网站开发对各个行业的影响。其中,物联网系统能够从传感器收集和处理大量数据。

    2023年1月5日
    1.1K00
  • 甘特图中的自动调整和手动调整有什么不同

    甘特图中自动调整与手动调整的核心差异在于后者允许项目管理者更具灵活性地应对实际进度和变动,而自动调整则是基于设定规则和算法自动更新项目时间线。1、自动调整依赖于软件工具,能够根据依赖关系、资源可用性以及其他约束条件快速调整任务时间线。2、手动调整赋予项目管理者掌控权,适用于需要根据经验和直觉对项目进…

    2023年12月21日
    23400

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部