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

相关推荐

  • 如何建立一个成功的技术创新生态系统

    建立一个成功的技术创新生态系统需要综合策略和协同努力。本文提供了一系列关键要素:1、多元化的资金来源、2、政策制定者的支持、3、高质量的教育基础、4、强大的企业家精神文化、5、有效的知识产权保护、6、协作促进的网络平台以及7、市场接入和商业化机会。这些要素共同作用,创造出柔性、动态的环境,这样的生态…

    2023年11月30日
    400
  • 软件开发需要投入哪些

    软件开发需要投入:1、业务需求成本;2、开发成本;3、升级成本;4、固定成本;5、维护成本。业务需求成本是指,一个软件产品,在实际进入实际开发阶段之前,需要进行大量的前期市场调研、可行性分析的花销。 1、业务需求成本 一个软件产品,在实际进入实际开发阶段之前,需要进行大量的前期市场调研、可行性分析,…

    2023年1月9日
    38200
  • OKR如何与业绩评估相结合

    OKR(Objectives and Key Results)与业绩评估相结合可以为组织提供一套更完整、更灵活的目标设定和评估体系。本文将探讨以下几个方面:一、OKR与业绩评估的关联;二、结合的优势;三、实施步骤与注意事项。OKR专注于目标和关键成果,而业绩评估则涉及员工整体表现的全面评价。结合这两…

    2023年9月4日
    7700
  • dns服务器是什么

    dns服务器是指域名服务器,是进行域名和与之相对应的IP地址转换的服务器,它是一种管理名字的方法,这种方法是分不同的组来负责各子系统的名字,系统中的每一层叫做一个域,每个域用一个点分开,dns实际上就是装有域名系统的主机,它是一种能够实现名字解析的分层结构数据库。 一、dns服务器是什么 dns服务…

    2023年7月22日
    13800
  • 云原生应用的网络策略是什么

    云原生应用的网络策略 主要集中在确保应用程序组件之间的通信是安全、可控的,同时优化网络利用以支持动态、分布式的环境。核心观点包括:1、隔离性与安全性、2、可观察性与监控、3、网络策略定义与执行、4、服务发现与负载均衡。通过网络策略,可以控制集群内不同服务之间的访问权限,有效地避免未授权的访问并通过网…

    2023年11月15日
    700
  • 路径图用什么软件做

    做路径图可以用:1. Microsoft Visio;2. OmniGraffle;3. Lucidchart;4. yEd Graph Editor;5. Gliffy。Microsoft Visio是一款Windows操作系统下的商业图形应用软件,它主要用于绘制各种类型的图表和流程图,包括路径图…

    2023年2月28日
    62400
  • SAAS主要用于什么行业

    SAAS主要用于适合以下情况的行业:1、看实力;2、看安全;3、看案例;4、看顾问;5、看服务;6、看管理;7、看功能;8、看技术。一个SaaS服务商的运营的稳定性非常重要,因此,信息化系统项目实施前需要考虑SaaS服务商的规模、盈利能力、增长情况等。 一、看实力 虽说目前各大SaaS服务商承诺支持…

    2023年4月29日
    7700
  • 好用的项目管理工具有哪些

    一些好用的项目管理工具包含:1、软件开发项目管理工具PingCode;2、项目协作管理软件Worktile;3、项目缺陷追踪管理软件Jira;4、微软项目管理软件Microsoft Project;5、开源项目缺陷管理系统Mantis BT等。 根据 Capterra 的数据研究,项目管理…

    2022年12月21日
    21800
  • 请问敏捷开发和迭代式开发的根本区别是什么

    敏捷开发和迭代式开发的根本区别在于:1、性质不同;2、开发方法模型不同;3、对需求要求不同。性质不同是指迭代开发是软件开发的生命周期模型,是一种开发过程;敏捷开发是多种软件开发项目管理方法的集合,是一种开发方法。这是两者最根本的区别。 1、性质不同 迭代开发是软件开发的生命周期模型,是一种开发过程;…

    2023年1月9日
    70600
  • 电子商务网站的商品搜索一般是怎么实现的

    电子商务网站的商品搜索一般通过以下几点实现:一、搜索引擎;二、搜索算法;三、搜索界面设计。电子商务网站的商品搜索功能一般都是由搜索引擎来实现的。搜索引擎是一种可以帮助用户在网站内快速搜索所需内容的工具。 一、搜索引擎 电子商务网站的商品搜索功能一般都是由搜索引擎来实现的。搜索引擎是一种可以帮助用户在…

    2023年5月30日
    19100

发表回复

登录后才能评论
站长微信
站长微信
电话联系

400-800-1024

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

分享本页
返回顶部