为什么会选择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

相关推荐

  • 项目的什么不包含管理储备

    项目的成本计划、风险应对策略、进度计划以及范围描述是不包含管理储备的。在项目管理中,管理储备是为了应对项目中无法预见的风险而设立的一种预算,它不包含在项目的初步预算中,也不包含在项目的成本基准中。这是因为管理储备的使用需要得到高层管理人员的批准,因此,它并不属于项目经理可以自由支配的资源。在具体实施…

    2024年8月7日
    700
  • 项目管理目标 ci目标是什么

    在项目管理中,CI目标是指持续集成目标,这是一种软件开发实践,它要求团队频繁地将代码集成到一个共享的主线中。CI目标主要包括:减少集成问题、提高软件质量、加速软件发布。 持续集成通过自动化的构建和测试,可以发现并修复集成问题,从而避免了“集成地狱”的情况。这有利于提高团队的效率,减少重复的工作,帮助…

    2024年8月7日
    400
  • 文化项目运行管理是什么

    文化项目运行管理包括:项目规划、资源配置、进度控制、成本管理、风险管理。项目规划是文化项目运行管理中最为关键的一环。它不仅涉及到项目的总体目标、阶段性目标和具体任务的明确,还包括对项目时间表、资源分配及预算的详细安排。一个科学的项目规划可以有效地指导项目的实施,确保项目按计划进行,避免资源浪费和时间…

    2024年8月7日
    300
  • 新加坡项目管理模式是什么

    新加坡的项目管理模式是一种以结果为导向,注重团队协作的管理方式。这种模式的主要特点包括:以项目为中心,明确项目目标和预期成果;强调团队之间的沟通和协作,确保项目的顺利进行;关注风险管理,提前预防和解决可能出现的问题;重视质量管理,保证项目成果的质量和效益。其中,以项目为中心,明确项目目标和预期成果是…

    2024年8月7日
    500
  • 项目管理师需要学什么

    项目管理师需要掌握的知识和技能主要包括:项目管理理论、项目质量管理、项目风险管理、项目时间管理、项目成本管理、项目沟通管理、项目人力资源管理、项目采购管理、项目整合管理等。此外,还需要具备一定的领导力、沟通能力、决策能力、协调能力、解决问题的能力以及时间管理能力等。 接下来,我将详细介绍这些知识和技…

    2024年8月7日
    200

发表回复

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

400-800-1024

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

分享本页
返回顶部