【C++进阶】初识CMake

这篇具有很好参考价值的文章主要介绍了【C++进阶】初识CMake。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 背景知识

CMake是Kitware公司以及一些开源开发者在开发几个工具套件(VTK)的过程中衍生品,最终形成体系,成为一个独立的开放源代码项目。项目的诞生时间是2001年,其官方网站是:www.cmake.org,可以通过访问官方网站获得更多关于CMake的信息。CMake的流行其实要归功于KDE4的开发,在KDE开发者使用了近10年autotools之后,他们终于决定为KDE4选择一个新的工程构建工具,其根本原因用KDE开发者的话来说就是:只有少数几个“编译专家”能够掌握KDE现在的构建体系(admin/Makefile.common),在经历了unsermake、scons以及CMake的选型和尝试之后,KDE4决定使用CMake作为自己的构建系统。在迁移过程中,进展异常的顺利,并获得了CMake开发者的支持。所以,目前的KDE4开发版本已经完全使用CMake来进行构建。像kdesvn、rosegarden等项目也开始使用CMake,这也注定了CMake必然会成为一个主流的构建体系。

2. 特点

CMake是一个非常强大且灵活的构建工具,能够简化跨平台开发的过程。

  • 跨平台支持:CMake支持各种操作系统,如Linux、macOS、Windows和其他类UNIX系统。这使得使用CMake的项目能够在不同的平台上轻松构建和运行。
  • 支持多种构建系统:CMake可以生成多种构建系统的文件,如GNU Make、Ninja、Microsoft Visual Studio等。这为项目提供了极大的灵活性,使其可以在不同的构建环境中运行。
  • 简化构建过程:CMake自动处理各种编译器和平台的特定细节,这使得开发人员能够专注于编写代码,而不用担心不同操作系统、编译器和构建工具之间的兼容性问题。
  • 强大的依赖管理:CMake可以自动检测和管理项目的依赖关系。使用find_package命令,CMake可以找到并链接项目所需的库和头文件。
  • 模块化:CMake采用模块化的设计,允许开发人员将项目拆分为多个子项目和组件。每个子目录中的CMakeLists.txt文件可以单独配置构建规则和依赖关系,从而简化项目的组织结构。
  • 扩展性:CMake具有很好的扩展性,可以通过自定义函数、宏和模块来满足特定项目的需求。这使得CMake能够适应不同类型的项目和工作流程。
  • 语言支持:CMake支持多种编程语言,如C、C++、Objective-C、Fortran等。这使得CMake可以轻松地管理和构建使用不同编程语言编写的项目。
  • 社区支持:CMake有一个庞大的用户和开发者社区,提供了丰富的资源和文档。这使得新手更容易上手,同时也为解决问题和改进功能提供了支持。

3. 存在的问题

  • 学习曲线:CMake使用其自定义的脚本语言编写,对于初学者来说,学习和理解这种语言可能需要一些时间和努力。
  • 语言限制:CMake的脚本语言相较于其他编程语言,如Python,功能较为有限,使得某些任务的实现变得更加复杂。
  • 文档和示例:虽然CMake的文档相对完善,但是对于初学者来说,可能难以理解。此外,高质量的示例和教程相对较少,使得学习CMake变得更具挑战性。
  • 冗长的语法:CMake的语法有时可能显得冗长和重复,导致CMakeLists.txt文件变得庞大和难以维护。
  • 跨平台问题:尽管CMake致力于实现跨平台兼容性,但在某些情况下,开发者仍需要针对不同平台编写特定的代码和设置。
  • 依赖管理:CMake的依赖管理相对较弱,尤其是与现代软件包管理器(如Python的pip或JavaScript的npm)相比。这可能导致项目中的依赖项难以管理和维护。
  • 社区分裂:CMake有多个版本和不同的实践方法,这可能导致社区内的分歧和不一致。这使得寻找解决方案和最佳实践变得更加困难。

4. 安装

4.1 Windows

  1. 下载CMake安装程序:
    访问CMake官方网站(https://cmake.org/download/),然后下载适用于Windows的CMake安装程序(“.msi” 文件)。

  2. 运行安装程序:
    双击下载的 “.msi” 文件并按照安装向导的提示进行操作。建议在安装过程中勾选 “Add CMake to the system PATH” 选项,以便在命令提示符中全局使用CMake。

4.2 Mac

  1. 使用Homebrew(推荐):
    如果您已经安装了Homebrew(一个macOS的包管理器),只需在终端中运行以下命令来安装CMake:
    brew install cmake
    
  2. 下载CMake安装程序:
    访问CMake官方网站(https://cmake.org/download/),然后下载适用于macOS的CMake安装程序(“.dmg” 文件)。双击 “.dmg” 文件并按照安装向导的提示进行操作。

4.3 Linux

  1. 使用包管理器(推荐):
    对于大多数Linux发行版,您可以使用系统自带的包管理器来安装CMake。以下是一些常见Linux发行版的安装命令:

    • Ubuntu/Debian:
      sudo apt-get update
      sudo apt-get install cmake
      
    • Fedora:
      sudo dnf install cmake
      
    • CentOS/RHEL:
      sudo yum install cmake
      
    • Arch Linux:
      sudo pacman -S cmake
      
  2. 编译源代码安装:
    如果您的Linux发行版没有预编译的CMake包,或者您需要安装特定版本的CMake,可以从源代码编译并安装CMake。首先,从CMake官方网站(https://cmake.org/download/)下载CMake源代码压缩包。然后按照以下步骤进行操作:

# 解压下载的源代码压缩包
tar -xzvf cmake-x.y.z.tar.gz
cd cmake-x.y.z

# 编译和安装CMake
./bootstrap
make
sudo make install

在上述命令中,将 “x.y.z” 替换为实际下载的CMake版本号。

安装完成后,您可以在命令行中输入cmake --version来确认CMake是否已成功安装及其版本信息。

5. CMake的初次尝试

假设我们有一个简单的C++项目,包含一个源文件(main.cpp)和一个头文件(hello.h)。CMake构建过程如下:

  1. 首先,在项目根目录下创建一个名为CMakeLists.txt的文件。这是CMake的配置文件,其中包含构建规则和依赖关系。

  2. CMakeLists.txt中添加以下内容:

    cmake_minimum_required(VERSION 3.10) # 设置CMake的最低版本要求
    project(HelloWorld) # 为项目命名,这里是HelloWorld
    
    set(CMAKE_CXX_STANDARD 11) # 设置C++标准,这里是C++11
    
    add_executable(hello_world main.cpp) # 添加一个可执行文件,名称为hello_world,使用main.cpp作为源文件
    

    解释:

    • cmake_minimum_required指定项目所需的CMake最低版本。这有助于确保项目与旧版本的CMake兼容
    • project命令为项目命名。这里的项目名称是HelloWorld
    • set命令设置一个变量。这里,我们设置CMAKE_CXX_STANDARD变量,指定项目要使用的C++标准,这里是C++11
    • add_executable命令告诉CMake要创建一个可执行文件,名称为hello_world,并使用main.cpp作为源文件。
  3. 打开终端(Linux/macOS)或命令提示符(Windows),导航到项目的根目录。

  4. 在项目根目录中创建一个名为build的文件夹。这个文件夹将用于存放CMake生成的构建文件:

    mkdir build
    cd build
    
  5. 运行CMake以生成构建文件。在build文件夹中,运行以下命令:

    cmake ..
    

    这会告诉CMake从父目录(..)中的CMakeLists.txt文件读取构建配置,并在当前目录(build)生成构建文件。

  6. 运行构建命令以编译项目。在build文件夹中,运行以下命令:
    对于Linux/macOS:

    make
    

    对于Windows(使用Visual Studio生成器):

    cmake --build .
    
  7. 一旦编译成功,将在build目录下找到可执行文件hello_world(在Windows上是hello_world.exe)。可以运行它来查看程序的输出。文章来源地址https://www.toymoban.com/news/detail-423872.html

到了这里,关于【C++进阶】初识CMake的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 初识云计算————虚拟化背景

    VM 虚拟机(Virtual Machine) 虚拟化背景:美国环境保护署(EPA)报告的一组有趣的统计数据就证明了其好处。EPA 研究服务器和数据中心的能源效率时发现,实际上服务器只有 5% 的时间是在工作的。在其他时间,服务器都处于 “休眠” 状态 原因: 1.有预期的冗余导致资源大量

    2023年04月08日
    浏览(36)
  • 【初识Linux】:背景介绍以及环境搭建

    朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux的基础知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏: C语言:从入门到精通 数据结构专栏: 数据结构 个  人  主  页 : stackY、 目录 1. Linux背景介绍    

    2024年02月06日
    浏览(35)
  • Three.js初识:渲染立方体、3d字体、修改渲染背景颜色

    用场景对three.js进行渲染:场景、相机、渲染器 场景 透视摄影机 参数解析: fov: 视野角度(FOV)。视野角度就是无论在什么时候,你所能在显示器上看到的场景的范围,它的单位是角度(与弧度区分开)。 aspect: 长宽比(aspect ratio)。 也就是你用一个物体的宽除以它的高的值

    2024年02月07日
    浏览(46)
  • Android进阶之路 - 背景阴影、阴影背景

    不知道你是不是也经常听到这些话:你这个没有阴影效果;你这个阴影太浓了;你这个阴影太粗了;你这个阴影太实了;你这个阴影颜色也不对,你这个阴影… 在正式开发中,临近上线前有个环节叫UI验收(产品验收在其前后均可),主要查看开发效果与设计图是否统一,当

    2024年02月04日
    浏览(40)
  • 【JavaEE进阶】 初识Spring Web MVC

    Spring Web MVC 是 基于 Servlet API 构建的原始 Web 框架 ,从⼀开始就包含在Spring框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为)Spring MVC). Servlet是⼀种实现动态⻚⾯的技术.准确来讲Servlet是⼀套Java Web 开发的规范,或者说是⼀套Java Web 开发的

    2024年02月03日
    浏览(45)
  • 【C语言】初识C语言+进阶篇导读

    ✨个人主页: Anmia. 🎉所属专栏:  C Language 🎃操作环境:   Visual Studio 2019 版本  本篇目的是面向编程新手,没接触过编程的人。以及C进阶的导读。 内容是C语言重要知识点的简单解释,不做详解。给新手对初级C框架的认识。由于篇幅上万字,干货满满。请大家沉下心看,

    2024年02月13日
    浏览(38)
  • 戴西软件公司收购PRESYS全球知识产权:以通用有限元仿真软件撬动工业未来

    戴西(上海)软件有限公司(以下简称“戴西”)荣幸宣布成功收购全球著名CAE软件开发商ETA公司(Engineering Technology Associates, Inc.)旗下有限元前、后处理软件PRESYS及相关技术成果的全球所有权、研发团队及全球客户。 对于国产工程应用行业相关制造商来说,这无疑是一个好

    2024年01月16日
    浏览(61)
  • 【CMake 入门与进阶(3)】 CMakeLists.txt 语法规则基础及部分常用指令(附使用代码)

            在上两篇中,笔者通过几个简单地示例向大家演示了 cmake 的使用方法,由此可知,cmake 的使用方法其实还是非常简单的,重点在于编写 CMakeLists.txt,CMakeLists.txt 的语法规则也简单,并没有 Makefile 的语法规则那么复杂难以理解!本文我们来学习CMakeLists.txt 的语法规

    2024年02月11日
    浏览(40)
  • 【Spring进阶系列丨第一篇】初识Spring开发

    小伙伴们大家好,我是陈橘又青,今天起 《Spring进阶系列》 开始更新。本专栏将涵盖Spring框架的核心概念、配置管理、Web开发、AOP、Boot、Security、Data、Integration和Batch等多个主题。通过理论讲解和实际案例的剖析,帮助读者深入理解Spring框架的原理和应用技巧,提升开发人员

    2024年02月05日
    浏览(46)
  • CSS进阶方法——复合选择器、元素显示、背景设置

    复合选择器是建立在基础选择器之上,对基础选择器进行 组合形成 的。 复合选择器可以更准确、更高效的选择目标元素(标签) 复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的 常用的复合选择器包括: 后代选择器 、 子选择器 、 并集选择器 、 伪类选

    2024年02月02日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包