0x01 介绍
CMake是一个跨平台的自动构建系统,它使用一个简单的语言来描述项目的构建过程,并且能够输出各种各样的构建系统的文件,如Makefiles和Microsoft Visual Studio项目文件。它的目标是简化项目的构建过程,让开发人员能够在多个平台上更方便地构建和管理项目
概念: CMakeLists.txt
CMakeLists.txt是CMake项目的构建脚本。它包含了项目的构建规则、依赖关系和其他信息,CMake使用它来生成项目的构建文件。通常,CMakeLists.txt文件位于项目的根目录,并且使用CMake命令来指定项目的各种设置。例如,您可以使用cmake_minimum_required命令来指定项目所需的最低CMake版本,或者使用project命令来指定项目的名称和类型。
CMakeLists.txt 是存储所有 CMake 命令的文件。当 cmake 在文件夹中运行时,它将查找此文件,如果不存在,cmake 将因错误退出。
概念: 最小 CMake 版本
使用 CMake 创建项目时,可以指定支持的最低版本的 CMake。
cmake_minimum_required(VERSION 3.1)
查询当前安装的cmake版本 cmake --version
安装: Cmake编译环境
当前环境是wls2
ln28@DESKTOP-FS9U3GT:/mnt/d/Project/Cmake_examples/cmake_basics_01/build$ uname -a
Linux DESKTOP-FS9U3GT 5.10.16.3-microsoft-standard-WSL2 #1 SMP Fri Apr 2 22:23:49 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
# 更新
sudo apt update
# 安装cmake
sudo apt cmake
#
0x02 示例
创建可执行文件
CMake来创建一个"Hello World"程序,那么需要准备两个文件:一个是源文件,包含程序的实际代码;另一个是CMakeLists.txt文件,包含构建脚本。首先,来创建一个名为hello_world.cpp的源文件,并在其中输入如下代码:
#include <iostream> int main() { std::cout << "Hello Cmake!" << std::endl; return 0; }
这段代码实现了一个简单的"Hello World"程序,它会在控制台输出一行"Hello Cmake"字符串。需要创建一个CMakeLists.txt文件,并在其中输入如下代码:
cmake_minimum_required(VERSION 3.1) #这里要改成3.1,因为系统安装的cmake是3.16.3
project(hello_world)
add_executable(hello_world hello_world.cpp)
这个CMakeLists.txt文件包含了三条CMake命令:
- cmake_minimum_required:指定项目所需的最低CMake版本。
- project:指定项目的名称。
- add_executable:创建一个可执行文件,并指定要编译进可执行文件中的源文件。
现在,您已经准备好了源文件和CMakeLists.txt文件,就可以通过CMake来构建这个项目了。首先,运行如下命令来创建一个构建目录:
mkdir build
cd build
您需要运行如下命令来生成构建文件:
cmake ..
# 解决办法
sudo apt-get update
sudo apt-get install -y build-essential
这条命令会读取上一级目录中的CMakeLists.txt文件,并根据其内容生成构建文件。具体而言,CMake会根据您指定的源文件和相关选项,生成一个用于编译项目的Makefile文件。在生成构建文件之后,您就可以运行如下命令来编译项目了:
make
这条命令会调用Makefile文件中的编译规则,对源文件进行编译,并生成可执行文件。如果编译成功,那么您会在当前目录下看到一个名为hello_world的可执行文件。最后,您可以运行如下命令来运行可执行文件:
./hello_world
就地构建
就地构建将会在与源代码相同的目录结构中生成所有临时文件。这意味着所有的 Makefile 和目标文件都散布在的普通代码中。要创建就地构建目标,请在根目录中运行 cmake 命令。
例如:
源外构建
使用源外构建,可以创建单个生成文件夹,该文件夹可以位于文件系统的任何位置。所有临时构建的目标文件都位于此目录中,以保持源码目录结构的整洁。要进行源外构建,请运行 build 文件夹中的 cmake 命令,并将其指向根 CMakeLists.txt 文件所在的目录。使用源外构建时,如果想从头开始重新创建 cmake 环境,只需删除构建目录,然后重新运行 cmake。
例如:
在本教程的所有例子中,都将使用源外构建。