news 2026/1/14 7:36:05

【CMake】CMake 基础笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【CMake】CMake 基础笔记

CMakeLists.txt 文件

CMakeLists.txt 是 CMake 的配置文件,用于定义项目的构建规则、依赖关系、编译选项等。每个 CMake 项目通常有一个或多个 CMakeLists.txt 文件。

文件结构和基本语法

1.指定 CMake 最低版本

cmake_minimum_required(VERSION 3.10)

2.定义项目

project(MyProject CXX) # 项目名和语言

3.创建可执行文件

add_executable(MyExecutable main.cpp other_file.cpp)

4.创建库

# 静态库 add_library(MyLibrary STATIC library.cpp) # 动态库 add_library(MySharedLibrary SHARED library.cpp)

5.链接库

target_link_libraries(MyExecutable MyLibrary)

6.添加包含目录

include_directories(${PROJECT_SOURCE_DIR}/include)

7.设置变量

set(CMAKE_CXX_STANDARD 11) set(MY_VAR "Hello World")

8.设置目标属性

target_include_directories(MyExecutable PRIVATE ${PROJECT_SOURCE_DIR}/include )

9.安装规则

install(TARGETS MyExecutable RUNTIME DESTINATION bin )

10.条件语句

if(CMAKE_BUILD_TYPE STREQUAL "Debug") message("Debug build") else() message("Release build") endif()

11.自定义命令

add_custom_command( TARGET MyExecutable POST_BUILD COMMAND ${CMAKE_COMMAND} -E echo "Build completed." )

完整实例

cmake_minimum_required(VERSION 3.10) project(MyProject CXX) # 添加可执行文件 add_executable(MyExecutable main.cpp) # 设置 C++ 标准 set(CMAKE_CXX_STANDARD 11)

变量系统

普通变量

set(MY_VAR "Hello World") message(STATUS "Variable is ${MY_VAR}")

缓存变量(用户可配置)

set(MY_CACHE_VAR "DefaultValue" CACHE STRING "A cache variable" )

外部库管理

查找系统库

# 基本查找 find_package(Boost REQUIRED) # 指定版本 find_package(Boost 1.70 REQUIRED) # 指定路径 find_package(OpenCV REQUIRED PATHS /path/to/opencv)

使用找到的库

target_link_libraries(MyExecutable Boost::Boost) # 传统方式(不推荐) include_directories(${Boost_INCLUDE_DIRS}) link_directories(${Boost_LIBRARY_DIRS})

Boost 库使用示例

cmake_minimum_required(VERSION 3.10) project(MyProject CXX) # 查找 Boost 库 find_package(Boost REQUIRED) # 创建可执行文件 add_executable(MyExecutable main.cpp) # 链接 Boost 库 target_link_libraries(MyExecutable Boost::Boost)

重要对比:include_directories vs target_include_directories

特性include_directories()target_include_directories()
作用范围全局,影响所有目标仅作用于指定目标
现代 CMake 推荐❌ 不推荐✅ 推荐使用
可维护性较差,易污染全局较好,逻辑清晰
作用域控制无法精确控制支持 PUBLIC/PRIVATE/INTERFACE
目标关联性不关联特定目标显式关联特定目标

使用建议

  • 推荐使用target_include_directories()
  • 避免使用include_directories()(除非遗留项目)

示例对比

# ❌ 传统方式(不推荐) include_directories(include) # ✅ 现代方式(推荐) target_include_directories(MyTarget PUBLIC include # 使用者也需要 PRIVATE src # 仅内部需要 INTERFACE . # 接口需要 )

关键要点

  1. 最小版本:始终指定cmake_minimum_required
  2. 明确项目:使用project()定义项目名和语言
  3. 目标为中心:优先使用target_xxx()系列命令
  4. 变量区分:理解普通变量和缓存变量的区别
  5. 现代实践:遵循目标属性模式,避免全局设置
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/13 20:59:17

《AI应用架构师眼中的企业AI价值链优化创新之道》

AI应用架构师眼中的企业AI价值链优化创新之道——从需求到落地的全流程增效策略 摘要 在企业AI转型的浪潮中,**“重模型、轻流程”**的传统思路往往导致项目陷入“需求对齐难、数据质量差、模型落地慢、ROI不明显”的困境。作为AI应用架构师,我深刻意识到…

作者头像 李华
网站建设 2026/1/13 0:01:50

深度学习毕设选题推荐:基于卷积网络结构的火灾检测系统实现

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/1/9 14:35:14

9个降AI率工具推荐!继续教育人群高效避坑指南

9个降AI率工具推荐!继续教育人群高效避坑指南 AI降重工具,让论文更“自然” 在继续教育的学术道路上,越来越多的学习者开始关注论文的AIGC率问题。随着AI技术的普及,许多学生在撰写论文时会借助AI辅助工具,但这也带来了…

作者头像 李华
网站建设 2026/1/9 8:07:46

强烈安利9个AI论文软件,专科生毕业论文必备!

强烈安利9个AI论文软件,专科生毕业论文必备! AI 工具正在改变论文写作的未来 在当今这个科技飞速发展的时代,AI 工具已经逐渐渗透到各个领域,其中论文写作也迎来了前所未有的变革。对于专科生而言,毕业论文往往是一个巨…

作者头像 李华
网站建设 2026/1/9 9:19:39

环境仿真软件:EcoPath with Ecosim_(3).EcoPath模型构建

EcoPath模型构建 模型构建概述 EcoPath with Ecosim (EwE) 是一个用于生态系统建模和仿真的强大工具。通过构建EcoPath模型,用户可以创建一个生态系统的静态快照,从而为后续的动态模拟提供基础。EcoPath模型的构建主要包括以下几个步骤:数据…

作者头像 李华
网站建设 2026/1/8 5:12:44

【毕业设计】基于卷积网络结构的火灾检测系统实现

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华