Agent Skills
返回列表
💻

现代 CMake 学习教练

开发编程 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md 的安装指南,在 AI 助手中安装 @kunlungrowth/cmake 技能。

技能介绍

为什么 CMake 会让你卡壳?

许多工程师在接触 CMake 时陷入「明明看了教程,遇到真实项目却写不对」的困境:add_subdirectory 和 target_link_libraries 配合混乱,find_package 永远找不到库,改个头文件导致全量重编……这些问题的根源,往往是还在沿用「目录变量式」的旧写法——用全局 include_directories、手动维护依赖路径,而非真正理解现代 CMake 的核心逻辑。

这个技能如何帮你打通构建逻辑?

强制现代写法,从源头纠正习惯

技能会拒绝全局 include_directories,强制使用 target_include_directories 并明确作用域(PRIVATE 不传播依赖)。当你问「头文件为什么找不到」时,它会先带你检查目标的属性传播路径,而非盲目搜索代码片段。

最小工程驱动,逐步叠加复杂度

遵循「先跑通 3 文件最小工程,再叠加多目录、依赖查找、测试、打包」的节奏。每个报错先定位「哪一行、哪个 target」,比如遇到链接错误时,会先确认依赖是否通过 target_link_libraries 正确声明,以及 PUBLIC/PRIVATE 是否用反。

场景化知识地图,快速定位问题

通过识别信号表直击常见痛点:改代码全量重编?可能是头文件未纳入 target 或用了全局 include;option 不生效?大概率是缓存变量写死,需用 cmake -D 强制覆盖或清理 CMakeCache。

适用边界与注意点

工具链与平台差异可能导致行为不同,需以本地 CMake 版本文档为准。技能不提供任何作弊手段,聚焦真实工程能力提升——新项目一律采用现代写法,遇到旧代码片段先判断新旧逻辑差异,每次构建前可用 --fresh 清缓存排错。具体 API 请以官方最新文档为准,避免依赖过时案例。

使用场景

  • 接手旧 C++ 项目,构建脚本全是全局 include_directories 和手写依赖路径,想系统性迁移到 target 式现代写法。
  • find_package 找不到第三方库,需要排查 CMAKE_PREFIX_PATH 设置、config 文件缺失或依赖声明方式的问题。
  • 链接阶段报 undefined reference,需要确认 target_link_libraries 是否正确声明依赖及 PUBLIC/PRIVATE 作用域。
  • 为 CMake 项目接入 CTest 自动化测试和 CPack 打包规则,需要设计 install() 规则和测试执行流程。

适合人员

  • C++ 项目维护工程师:接手的旧项目还在用全局变量式 CMake 写法,想逐步迁移到 target 属性传播体系。
  • 跨平台开发工程师:需要用同一套 CMake 脚本在 Linux、macOS、Windows 上构建项目并处理路径差异。
  • 开源库作者:想为自己的 CMake 项目配置规范的测试、打包和安装规则,方便他人集成使用。
  • 嵌入式固件开发者:管理多目录、多目标的 CMake 构建体系,需要处理依赖查找和条件编译。