Windows系统中 CMake 快速图解入门 ( 解决你的开发环境 )
CMake是一个跨平台的自动化构建系统,它使用配置文件(CMakeLists.txt)来生成标准的构建文件,如Unix的Makefile或Windows的Visual Studio解决方案。CMake 能够处理项目的组织、编译器选项、库依赖和目标文件的生成。CMake 并不直接管理依赖,但它可以找到已安装在系统上的库,并根据需要生成适当的链接指令。CMake 常用于C和C++项目,尤其是那些需要跨
目录
介绍
- CMake 是一个跨平台的自动化构建系统,它使用配置文件(CMakeLists.txt)来生成标准的构建文件,如Unix的Makefile或Windows的Visual Studio解决方案。
- CMake 能够处理项目的组织、编译器选项、库依赖和目标文件的生成。
- CMake 并不直接管理依赖,但它可以找到已安装在系统上的库,并根据需要生成适当的链接指令。
- CMake 常用于C和C++项目,尤其是那些需要跨平台支持的项目。
下载
两者都可以
都会跳到 https://github.com/Kitware/CMake
下载缓慢或进不去网站解决方法
考虑部分同学的网络有点慢,
可能需要VPN,公棕号 wmcode 回复 【 vpn 】即可
安装
直接下一步
勾选协议
添加环境+快捷方式
建议改路径
点击安装
安装中
安装成功
检测安装
命令提示符检测
Ctrl + R 输入 cmd
输入 cmake --verison
如果有版本则安装成功
简单入门
我们直接创建简单的项目
构建新项目
选择CMake项目
建议更改路径
创建成功
可以看到它帮我们已经创建好了相关的文件
项目结构分析
Demo/
│
├── CMakeLists.txt # 主项目的 CMake 配置文件
├── CMakePresets.json # 用于存储 CMake 的构建预设(presets)
├── Demo.cpp # 项目 源文件
├── Demo.h # 项目 头文件
让我们来简单分析一下每个文件的作用:
-
CMakeLists.txt
- 这是 CMake 的主要配置文件,其中包含了构建项目所需的指令和规则。在这个文件里,你可以指定源代码文件、库依赖、编译选项、生成的目标以及其他与构建相关的配置。
-
CMakePresets.json
- 如之前所述,这是一个 JSON 文件,用于存储 CMake 构建预设。这些预设可以包括构建类型(如 Debug 或 Release)、生成器(如 Ninja 或 Visual Studio)、构建目录位置等信息。这样可以在不同的环境中快速配置并运行 CMake。
-
Demo.cpp
- 这是你的源代码文件,包含了实现程序功能的具体代码。
-
Demo.h
- 这是头文件,一般用来声明类、函数原型和其他公共接口。在 C++ 中,头文件通常包含在多个源文件中,以便于重用代码。
如何使用这些文件
当你准备好构建项目时,可以使用 CMake 从 CMakeLists.txt
文件生成构建文件。这些构建文件可以被构建工具(如 MSBuild 或 Ninja)用来编译和链接源代码。
在命令行中构建项目
如果你想要手动构建项目,可以通过命令行来执行 CMake 和构建命令。假设你想在一个名为 build
的子目录中构建 Debug 版本,可以按照以下步骤操作:
- 打开命令提示符或终端窗口。
- 导航到项目根目录。
- 创建一个构建目录(如果尚未创建):
1mkdir build
- 切换到构建目录:
1cd build
- 运行 CMake 来配置构建系统:
1cmake -DCMAKE_BUILD_TYPE=Debug ..
- 构建项目:
1cmake --build .
使用 Visual Studio 构建项目
如果你使用的是 Visual Studio,你可以直接打开项目解决方案文件(.sln
文件),然后选择要构建的配置(Debug 或 Release),并使用 Visual Studio 的构建菜单或快捷键来构建项目。
注意事项
- 确保
CMakeLists.txt
文件正确配置了你的项目,包括添加源文件、定义目标等。 - 如果你在使用
CMakePresets.json
文件时遇到问题,确保它的格式正确并且与你的构建需求相匹配。 - 如果你对某些 CMake 指令不熟悉,查阅官方文档或在线资源会有帮助。
项目分析
CMakeLists.txt
# CMakeList.txt: Demo 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)
# 如果支持,请为 MSVC 编译器启用热重载。
if (POLICY CMP0141)
cmake_policy(SET CMP0141 NEW)
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>")
endif()
project ("Demo")
# 将源代码添加到此项目的可执行文件。
add_executable (Demo "Demo.cpp" "Demo.h")
if (CMAKE_VERSION VERSION_GREATER 3.12)
set_property(TARGET Demo PROPERTY CXX_STANDARD 20)
endif()
# TODO: 如有需要,请添加测试并安装目标。
CMakePresets.json
CMakePresets.json
文件的作用
-
简化构建配置:
- 存储构建选项,如构建目录、生成器、编译器选项等。
- 允许快速切换构建配置。
-
跨平台构建:
- 支持不同平台的构建配置。
- 方便在不同操作系统间共享构建设置。
-
IDE 集成:
- 许多现代 IDE 和构建工具支持读取
CMakePresets.json
文件来自动配置构建环境。
- 许多现代 IDE 和构建工具支持读取
-
脚本化构建:
- 可以通过脚本调用
cmake
命令来使用预设配置,简化构建过程。
- 可以通过脚本调用
CMakePresets.json
文件的结构
CMakePresets.json
文件通常包含以下部分:
version
:指定 CMake Presets 规范的版本。vendor
:可选部分,用于存储特定于某个工具的信息。configurePresets
:一组配置预设。buildPresets
:一组构建预设。testPresets
:一组测试预设。
{
"version": 3,
"configurePresets": [
{
"name": "windows-base",
"hidden": true,
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"installDir": "${sourceDir}/out/install/${presetName}",
"cacheVariables": {
"CMAKE_C_COMPILER": "cl.exe",
"CMAKE_CXX_COMPILER": "cl.exe"
},
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
}
},
{
"name": "x64-debug",
"displayName": "x64 Debug",
"inherits": "windows-base",
"architecture": {
"value": "x64",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "x64-release",
"displayName": "x64 Release",
"inherits": "x64-debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "x86-debug",
"displayName": "x86 Debug",
"inherits": "windows-base",
"architecture": {
"value": "x86",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "x86-release",
"displayName": "x86 Release",
"inherits": "x86-debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
}
]
}
解释示例
-
configurePresets
:定义了两个配置预设,分别是debug
和release
。name
:预设名称。displayName
:显示名称,用于用户界面。description
:描述。generator
:构建生成器,如Ninja
。binaryDir
:构建目录。cacheVariables
:CMake 缓存变量,如CMAKE_BUILD_TYPE
。
-
buildPresets
:定义了两个构建预设,分别对应debug
和release
配置预设。name
:预设名称。configurePreset
:关联的配置预设名称。
-
testPresets
:定义了测试预设,用于运行测试。name
:预设名称。configurePreset
:关联的配置预设名称。
使用 CMakePresets.json
文件
一旦你有了 CMakePresets.json
文件,就可以通过各种工具来利用这些预设。例如,你可以使用 cmake
命令行工具来构建项目:
cmake --preset debug
cmake --build debug
Demo.cpp
// Demo.cpp: 定义应用程序的入口点。
//
#include "Demo.h"
using namespace std;
int main()
{
cout << "Hello CMake." << endl;
return 0;
}
Demo.h
// Demo.h: 标准系统包含文件的包含文件
// 或项目特定的包含文件。
#pragma once
#include <iostream>
// TODO: 在此处引用程序需要的其他标头。
项目运行
完结散花
以上便是我个人学习过程中,慢慢笔记的
(到底啦)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)