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
-
下载CMake安装程序:
访问CMake官方网站(https://cmake.org/download/),然后下载适用于Windows的CMake安装程序(“.msi” 文件)。 -
运行安装程序:
双击下载的 “.msi” 文件并按照安装向导的提示进行操作。建议在安装过程中勾选 “Add CMake to the system PATH” 选项,以便在命令提示符中全局使用CMake。
4.2 Mac
- 使用Homebrew(推荐):
如果您已经安装了Homebrew(一个macOS的包管理器),只需在终端中运行以下命令来安装CMake:brew install cmake
- 下载CMake安装程序:
访问CMake官方网站(https://cmake.org/download/),然后下载适用于macOS的CMake安装程序(“.dmg” 文件)。双击 “.dmg” 文件并按照安装向导的提示进行操作。
4.3 Linux
-
使用包管理器(推荐):
对于大多数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
- Ubuntu/Debian:
-
编译源代码安装:
如果您的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构建过程如下:
-
首先,在项目根目录下创建一个名为
CMakeLists.txt
的文件。这是CMake的配置文件,其中包含构建规则和依赖关系。 -
在
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
作为源文件。
-
-
打开终端(Linux/macOS)或命令提示符(Windows),导航到项目的根目录。
-
在项目根目录中创建一个名为
build
的文件夹。这个文件夹将用于存放CMake生成的构建文件:mkdir build cd build
-
运行CMake以生成构建文件。在
build
文件夹中,运行以下命令:cmake ..
这会告诉CMake从父目录(
..
)中的CMakeLists.txt
文件读取构建配置,并在当前目录(build
)生成构建文件。 -
运行构建命令以编译项目。在
build
文件夹中,运行以下命令:
对于Linux/macOS:make
对于Windows(使用Visual Studio生成器):文章来源:https://www.toymoban.com/news/detail-423872.html
cmake --build .
-
一旦编译成功,将在
build
目录下找到可执行文件hello_world
(在Windows上是hello_world.exe
)。可以运行它来查看程序的输出。文章来源地址https://www.toymoban.com/news/detail-423872.html
到了这里,关于【C++进阶】初识CMake的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!