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

CMake使用教程

一、CMake 简介

CMake 是一个跨平台的构建工具,用于自动化生成不同平台(如 Makefile、Visual Studio、Xcode 等)的构建文件。它的核心是编写 CMakeLists.txt 文件,定义项目的构建规则。


二、安装 CMake

  • Linux:

    
    sudo apt-get install cmake
  • Windows:

    下载安装包 CMake官网。

  • macOS:

    
    brew install cmake

三、基础用法

1. 最小化 CMake 项目

创建一个 CMakeLists.txt 文件:


cmake_minimum_required(VERSION 3.10) # 指定 CMake 最低版本project(MyProject) # 项目名称add_executable(my_app main.cpp) # 生成可执行文件
2. 构建项目

mkdir build && cd build # 创建构建目录(推荐)cmake .. # 生成构建文件(如 Makefile)make # 编译项目(Linux/macOS)

四、核心命令详解

1. 定义项目

project(MyProject # 项目名VERSION 1.0.0 # 版本号(可选)LANGUAGES C CXX # 支持的语言(C/C++))
2. 添加可执行文件

add_executable(my_app          # 可执行文件名main.cpp # 源文件列表utils.cpp)
3. 添加库

# 静态库add_library(my_lib STATIC lib.cpp)# 动态库(SHARED)add_library(my_lib SHARED lib.cpp)
4. 链接库到可执行文件

target_link_libraries(my_app PRIVATE my_lib)
5. 包含头文件目录

target_include_directories(my_app # 目标(可执行文件或库)PRIVATE # 作用域(PUBLIC/PRIVATE/INTERFACE)include # 头文件目录)
6. 设置编译选项

# 全局编译选项add_compile_options(-Wall -Wextra)# 目标专属选项target_compile_options(my_app PRIVATE -O2)
7. 变量与条件判断

set(MY_VAR "value") # 定义变量if (WIN32)# Windows 平台特有配置endif()

五、多目录项目结构

1. 子目录管理

project/├── CMakeLists.txt # 根目录├── src/│ ├── CMakeLists.txt│ └── main.cpp└── lib/├── CMakeLists.txt└── my_lib.cpp

根目录的 CMakeLists.txt


cmake_minimum_required(VERSION 3.10)project(MyProject)add_subdirectory(lib) # 包含子目录add_sadd_subdirectory(src)

子目录的 CMakeLists.txt(例如 src/CMakeLists.txt):

add_executable(my_app main.cpp)
target_link_libraries(my_app PRIVATE my_lib)

六、常用变量

变量名说明
CMAKE_CXX_STANDARD设置 C++ 标准(如 11/14/17)
CMAKE_BUILD_TYPE构建类型(Debug/Release)
CMAKE_CXX_COMPILER指定编译器路径
PROJECT_SOURCE_DIR项目根目录路径

示例:

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_BUILD_TYPE Debug)

七、进阶功能

1. 生成配置头文件
configure_file(config.h.in           # 输入文件config.h              # 输出文件
)
2. 查找第三方库
find_package(Boost REQUIRED COMPONENTS filesystem)
target_link_libraries(my_app PRIVATE Boost::filesystem)
3. 安装目标
install(TARGETS my_app        # 安装可执行文件DESTINATION bin       # 安装路径(默认 /usr/local/)
)
4. 自定义命令
add_custom_command(OUTPUT output_fileCOMMAND python3 script.pyDEPENDS input_file
)

八、常见问题

1. 如何生成 IDE 项目(如 Visual Studio)?
cmake -G "Visual Studio 17 2022" ..
2. 如何清理构建文件?
rm -rf build/          # Linux/macOS
3. 如何启用调试信息?
set(CMAKE_BUILD_TYPE Debug)

九、完整示例

项目结构
demo/
├── CMakeLists.txt
├── include/
│   └── utils.h
├── src/
│   ├── main.cpp
│   └── utils.cpp
└── lib/└── math/├── CMakeLists.txt├── math.h└── math.cpp
根目录 CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(DemoProject VERSION 1.0)add_subdirectory(lib/math)   # 添加数学库
add_subdirectory(src)# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
lib/math/CMakeLists.txt
add_library(math STATIC math.cpp)
target_include_directories(math PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
src/CMakeLists.txt
add_executable(demo main.cpp utils.cpp)
target_include_directories(demo PRIVATE ../include)
target_link_libraries(demo PRIVATE math)

参考资料:

CMake文档:CMake Documentation。

http://www.xdnf.cn/news/259.html

相关文章:

  • IO流(二)
  • 从 Transformer 到文本生成 (From Transformer to Text Generation)
  • STM32---GPIO
  • Linux——进程通信
  • Spring MVC 初体验~~
  • 自定义 el-menu
  • 【jenkins】首次配置jenkins
  • 合成数据中的对抗样本生成与应用:让AI模型更强、更稳、更安全
  • 代码学习总结(五)
  • cmake 语法大纲
  • 研究生面试常见问题
  • 1.Linux基础指令
  • 卷积神经网络(CNN)与VGG16在图像识别中的实验设计与思路
  • docker镜像被覆盖了怎么办?通过sha256重新上传镜像
  • VueRouter笔记
  • 6. 实战(二):用Spring AI+OpenAI构建企业级智能客服
  • LeetCode19.删除链表的倒数第N个节点
  • OpenCV图像加密和解密
  • PGSql常用操作命令
  • OBS 日期时间.毫秒时间脚本 date-and-time.lua
  • 该文件没有与之关联的程序来执行此操作
  • 图像预处理-图像噪点消除
  • 【人工智能】DeepSeek 与 RAG 技术:构建知识增强型问答系统的实战
  • 前端 实现文字打字效果(仿AI)
  • JESD204B标准及其在高速AD采集系统中的应用详解
  • 计算机网络 - 在浏览器中输入 URL 地址到显示主页的过程?
  • polkitd服务无法启动导致docker无法启动问题解决
  • pytorch基本操作2
  • Python Logger用法和说明
  • 深入解析 Python 中的装饰器 —— 从基础到实战