当前位置: 首页 > news >正文

CMake初探篇一

CMake初探篇一

CMake初探篇一

目录
  • CMake初探篇一
    • 1. 什么是 CMake
    • 2. 构建流程
      • 1、创建构建目录
      • 2、使用 CMake 生成构建文件
      • 3、编译和构建
      • 4、清理构建文件
    • 3. CMake快捷帮助
      • 1. 基础帮助命令
      • 2. 帮助分类查看
      • 3. 查找特定帮助
      • 4. 帮助查看技巧
    • 4. 实际案例
      • 1. 入门案例:单个源文件
      • 2. 同一目录,多个源文件
    • 参考链接


元·唐珙《题龙阳县青草湖》

西风吹老洞庭波,一夜湘君白发多。
醉后不知天在水,满船清梦压星河。

33

1. 什么是 CMake

CMake 构建工具:它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到“Write once, run everywhere”。显然,CMake 是一个比上述几种 make 更高级的编译配置工具。

2. 构建流程

  1. 创建构建目录:保持源代码目录整洁。
  2. 使用 CMake 生成构建文件:配置项目并生成适合平台的构建文件。
  3. 编译和构建:使用生成的构建文件执行编译和构建。
  4. 清理构建文件:删除中间文件和目标文件。

1、创建构建目录

CMake 推荐使用 "Out-of-source" 构建方式,即将构建文件放在源代码目录之外的独立目录中。

这样可以保持源代码目录的整洁,并方便管理不同的构建配置。因此可以通过下面命令来进行创建build构建目录,同时进入build目录。

mkdir build
cd build

2、使用 CMake 生成构建文件

在构建目录中运行 CMake,以生成适合当前平台的构建系统文件(例如 Makefile、、Ninja 构建文件、Visual Studio 工程文件等)。

因为此时在build目录,而进行CMake进行构建的指令需要找到CMakeLists.txt所在的目录,因此需要返回到上一级。

cmake ..

在实战中,可以设用快捷指令来代替第一步和第二步的构成。

cmake -S . -B build

-S .:指定源目录为当前目录(.

-B build:指定构建目录为 build` 子目录

cmake -S . -B build
// 等同于下面语句
mkdir build
cd build
cmake ..
cd ..

3、编译和构建

使用生成的构建文件进行编译和构建。

# 使用 CMake 构建(推荐)
cmake --build build
// --build 是进行构建的动作,后面的build是包含makefile等生成文件的目录。

4、清理构建文件

# 3. 清理构建文件
cmake --build build --target clean

3. CMake快捷帮助

1. 基础帮助命令

# 查看版本
cmake --version# 查看简要帮助, 包含一下关键子的用法和简要的帮助指令
cmake --help
cmake -h# 查看详细帮助(分类显示),非常多,不建议在cmd中查看
cmake --help-full

2. 帮助分类查看

# 查看特定类别帮助
cmake --help-command-list      # 所有命令列表
cmake --help-variable-list     # 所有变量列表
cmake --help-property-list     # 所有属性列表
cmake --help-module-list       # 所有模块列表
cmake --help-policy-list       # 所有策略列表

3. 查找特定帮助

# 查看特定命令的完整帮助
cmake --help-command add_executable
cmake --help-command find_package
cmake --help-command target_link_libraries# 搜索包含特定关键词的命令
cmake --help-command-list | grep -i target  #, 不可用
cmake --help-command-list | findstr target  # Windows,查找包含 'target' 的命令

4. 帮助查看技巧

使用管道和 grep/findstr

# Linux/Mac, 未验证
cmake --help-command-list | grep -i "add_"
cmake --help-variable-list | grep "CMAKE_CXX"
cmake --help | grep -A5 "^-G"# Windows PowerShell
cmake --help-command-list | Select-String "target"
cmake --help-variable-list | findstr CMAKE# Windows CMD
cmake --help-command-list | findstr "add_"

4. 实际案例

1. 入门案例:单个源文件

编写 main.cpp 和 CMakeLists.txt

main.cpp

#include <iostream>
using namespace std;int main()
{cout << "Hello, Hakuon" << endl;system("pause");return 0;
}

CMakeLists.txt

# CMake 最低版本号要求
cmake_minimum_required (VERSION 3.15)# 项目信息
project (HakuSingleDemo)# 指定生成目标
add_executable(HakuSingleDemo main.cpp)

生成效果

C1

这是一个最简单的单文件CMake程序。CMake 的构建流程分为几个主要步骤,从设置项目到生成和执行构建命令。

2. 同一目录,多个源文件

如果在CMakeLists.txt中存在多个头文件和CPP文件,则可以更改CMakeLists.tx中的使用方法。

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)# 项目信息
project (HakuSingleDemo)# 指定生成目标
add_executable(HakuSingleDemo main.cpp C1.cpp C2.cpp)

也可以快捷使用下面这个方法:

aux_source_directory(<dir> <variable>) 命令,该命令会查找指定目录下的所有源文件,然后将结果存进指定变量名。

这样,CMake 会将当前目录所有源文件的文件名赋值给变量 DIR_SRCS ,再指示变量 DIR_SRCS 中的源文件需要编译成一个名称为 HakuSingleDemo的可执行文件。

参考链接

CMake入门

CMake菜鸟教程

http://www.jsqmd.com/news/63191/

相关文章:

  • # AWS全球宕机:DNS故障引发互联网级连锁反应
  • # 智能编辑器与传统IDE混合使用实践指南
  • # 【Context7 MCP测试】 RAG技术栈深度调研:Context7 MCP实战测试报告
  • # 35岁外包被裁后的一键复仇:Schultz事件背后的科技行业内部威胁新趋势
  • # LinkedIn代码重构失败案例:300万行代码的迁移困境与组织文化反思
  • 一只菜鸟学深度学习的日记:入门卷积
  • # 【测试场景2】2025年10月AI行业动态深度报告:技术突破、市场动向与产业洞察
  • AI规则管理实践经验:规则过多与AI注意力问题
  • # RAG开创性论文解读:检索增强生成的技术革命(Meta AI 2020)
  • Markdown图标美化Prompt
  • # RAGAS论文解读:RAG评估的标准框架(2023)
  • 人机共创精简价值Prompt
  • 可复用Prompt识别与生成专家Prompt
  • # HyDE论文解读:零样本密集检索的巧思(2022)
  • Scalar使用说明
  • # 思维链提示论文解读:开启LLM推理能力的钥匙(Google 2022)
  • VS2022启用调试外部NuGet源码
  • VS2022启用调试外部NuGet源码
  • alpine设置开机自启动服务
  • Scalar可视化OpenAPI文档中心
  • eshop创建订单执行流程详解
  • 最新版Flutter3.38+Dart3.10仿写抖音APP直播+短视频+聊天应用程序
  • eshop订单状态流转详解
  • ehop环境搭建
  • Blazor入门
  • 警惕!React服务器组件爆出高危远程代码执行漏洞
  • .NET Core 微服务之Grpc远程调用
  • 用 C++ + OpenCV + Tesseract 实现英文数字验证码识别
  • 用 PHP(Laravel)+ ImageMagick + Tesseract 实现验证码识别
  • 用 TensorFlow 构建深度学习验证码识别系统