CMake 轻松学
文章平均质量分 96
化繁为简,用清晰易懂的语言和丰富的示例,手把手教你掌握 CMake 的核心概念和实用技巧。无论是 C++ 新手还是资深开发者,都能轻松上手,构建跨平台、可维护、高效的 C++ 工程。
Lion 莱恩呀
专注于后端全栈开发技术研究与分享。覆盖领域包括但不限于:C/C++底层原理与实践、Linux系统编程与运维、数据库(SQL/NoSQL)设计与优化、分布式系统架构与实现、主流中间件应用与源码、云原生(容器、K8s等)技术栈。致力于分享实战经验、系统设计思路与前沿技术洞察。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【021】动态分析检测内存缺陷:Valgrind 和 CMake/CTest 的集成
本文介绍了如何在CMake/CTest项目中集成Valgrind工具进行内存缺陷检测。通过创建一个包含内存泄漏的C++示例项目,展示了如何配置CMakeLists.txt文件来调用Valgrind的Memcheck工具。文章详细说明了查找Valgrind程序路径、设置检查参数的步骤,并演示了通过ctest命令触发内存检查的过程。最终Valgrind成功检测出示例中的内存泄漏问题,验证了该集成方案的可行性。这种方法能帮助开发者在早期发现内存错误和泄漏问题,提高代码质量和安全性。原创 2025-12-22 09:00:00 · 790 阅读 · 0 评论 -
【020】使用Google Test进行 C++ 单元测试:基于 CMake 和 FetchContent 的现代方法
本文介绍了如何在C++项目中使用CMake的FetchContent模块集成Google Test框架进行单元测试。首先展示了待测试的求和函数实现(sum_integers)和测试用例(test.cpp),然后详细讲解了CMakeLists.txt的配置过程,包括设置C++标准、创建库和可执行文件、以及通过FetchContent动态下载Google Test。重点说明了FetchContent的工作原理,包括声明外部项目、检查填充状态、下载配置等步骤,并提供了针对不同平台的特定配置选项。这种方法避免了直接原创 2025-10-26 17:49:58 · 1100 阅读 · 0 评论 -
【019】使用 CTest 构建和运行单元测试
本文介绍了如何利用CMake的CTest工具进行跨语言单元测试。通过一个整数求和功能的C++实现,展示了如何配置CMake来支持C++、Bash和Python三种语言的测试用例。C++测试直接调用函数验证结果,Bash脚本测试命令行参数处理,Python脚本则通过subprocess模块进行更复杂的测试。文章详细说明了测试用例的实现方法,包括错误处理和结果验证,并强调了CTest的灵活性——只要测试程序能通过退出码返回结果,任何语言都可以集成到测试框架中。这种多语言测试方法为软件开发提供了更全面的质量保障。原创 2025-10-20 09:00:00 · 1171 阅读 · 1 评论 -
【018】CMake检查外部库pkg-config详解
CMake中查找外部库的两种主要方法:使用find_package内置模块或库自带的Config文件。当这两种方法不可用时,可通过pkg-config工具或编写自定义查找模块解决。本文以ZeroMQ的"Hello World"示例项目为例,演示了使用pkg-config的具体步骤:首先声明C++项目并设置标准,然后通过FindPkgConfig模块查找pkg-config程序,最后用pkg_search_module查找ZeroMQ库并创建导入目标。这种方法适用于系统已安装pkg-con原创 2025-09-24 11:45:30 · 1681 阅读 · 0 评论 -
【017】还在为查找路径发愁?CMake find家族命令帮你轻松搞定文件、库、包、路径、程序的查找!
CMake的find家族命令(find_file、find_library、find_package、find_path、find_program)是管理项目依赖的核心工具。它们通过智能搜索系统路径、环境变量和用户指定位置,自动定位外部依赖项(库文件、头文件、可执行程序等),解决了手动路径配置的痛点。这些命令遵循统一的查找逻辑:优先检查缓存,再依次搜索HINTS路径、环境变量、PATHS路径和系统标准路径,成功后会缓存结果并设置_FOUND和_PATH变量。通过参数如REQUIRED、QUIET等可灵活控制原创 2025-09-15 09:00:00 · 1079 阅读 · 0 评论 -
【016】还在为并行编程头疼?CMake 一键解决!
摘要: 本文介绍了如何利用CMake简化OpenMP和MPI并行编程环境的配置。通过CMake的FindOpenMP和FindMPI模块,可以自动检测编译器对并行库的支持,并生成对应的构建配置。对于OpenMP,示例代码展示了如何在C++中通过#pragma指令实现并行求和,并通过CMake链接OpenMP::OpenMP_CXX目标。文章强调了对CMake 3.9+版本的要求,并提供了兼容旧版的备选方案,帮助开发者快速构建高性能并行程序,同时确保跨平台兼容性。原创 2025-09-08 09:00:00 · 1146 阅读 · 0 评论 -
【015】CMake 构建中运行外部工具?是时候掌握这个技巧了!
CMake构建中运行外部工具的核心技巧 CMake提供了add_custom_command和execute_process两个关键命令来集成外部工具到构建流程中: add_custom_command:用于构建阶段执行命令,支持文件生成、资源处理等任务。它能自动管理依赖关系,当输入文件变化时自动重新生成输出文件。 execute_process:在CMake配置阶段立即执行命令,适合环境检查、版本验证等前期准备工作。原创 2025-09-02 09:00:00 · 1286 阅读 · 0 评论 -
【014】CMake + Python:构建无缝链接的 C/C++ 与 Python 项目
摘要:本文介绍了如何在CMake项目中检测和使用Python解释器。通过FindPythonInterp模块可自动查找系统Python解释器路径和版本信息,使用execute_process命令执行Python脚本或命令,并获取执行结果。文中提供了完整的CMake配置示例,包括项目设置、解释器检测、命令执行和结果验证,确保构建过程对Python脚本的依赖具备良好的跨平台兼容性。这种方法特别适用于需要Python辅助完成构建任务的C/C++项目。原创 2025-08-22 09:00:00 · 2072 阅读 · 0 评论 -
【013】CMake 依赖管理:find_package 依赖查找机制深度剖析与实践
本文深入解析CMake的find_package依赖查找机制,探讨其在大型项目管理中的关键作用。文章首先将依赖管理比作建造摩天大楼的过程,强调稳定可靠的依赖关系对项目构建的重要性。随后详细介绍find_package命令的基本语法、工作原理和返回变量,包括模块模式与Config模式的区别、路径搜索顺序等核心概念。原创 2025-08-12 09:00:00 · 1582 阅读 · 0 评论 -
【012】CMake 跨平台开发:精准检测处理器架构和系统信息
摘要:本文介绍了如何利用CMake检测处理器体系结构和系统信息以实现跨平台兼容。通过分析CMake内置变量如CMAKE_SIZEOF_VOID_P(检测32/64位系统)和CMAKE_HOST_SYSTEM_PROCESSOR(识别处理器类型),演示了如何编写条件编译逻辑。示例代码展示了根据体系结构定义预处理器宏(ARCHITECTURE、IS_32/64_BIT_ARCH),并在C++程序中动态输出系统信息的方法。这种技术对于处理遗留代码、硬件交互和交叉编译场景尤为重要,能有效提升代码的可移植性。原创 2025-08-01 09:00:00 · 1455 阅读 · 0 评论 -
【011】CMake 跨平台开发:操作系统、平台与编译器适配指南
CMake 如何实现对构建环境的感知,重点关注其在检测操作系统、处理平台相关代码以及适应不同编译器方面的能力。原创 2025-07-25 09:00:00 · 2035 阅读 · 0 评论 -
【010】CMake 命令速查:常用命令详解与示例
CMake是一个跨平台的开源构建系统生成器,可根据CMakeLists.txt文件描述生成特定平台的构建系统。其作用是将构建过程与编译器、操作系统和IDE解耦,实现一次编写,到处构建。CMake优势包括跨平台支持、自动化构建过程、丰富的配置选项、良好支持现代C++标准等。原创 2025-07-21 09:00:00 · 1450 阅读 · 0 评论 -
【009】你的 CMake 项目编译不过?或许只是忘了这件事…
CMake项目编译失败可能源于未正确设置C++语言标准。本文通过一个工厂模式动态创建多态对象的案例,展示了如何通过CXX_STANDARD、CXX_STANDARD_REQUIRED和CXX_EXTENSIONS属性确保编译器使用指定C++标准(如C++14)。案例项目包含动态库和可执行文件,使用现代C++特性(如std::make_unique、std::function),需在CMake中显式声明标准版本。正确配置后可避免"未定义标识符"等编译错误,确保代码跨平台兼容性。原创 2025-07-16 09:00:00 · 1693 阅读 · 0 评论 -
【008】你的 CMake 构建慢吗?深入理解构建类型!
CMake构建类型(`CMAKE_BUILD_TYPE`)用于控制编译和链接,包含Debug、Release等。选择合适的构建类型可优化性能、方便调试。推荐命令行设置,并区分单/多配置生成器使用场景。原创 2025-07-09 09:00:00 · 1357 阅读 · 0 评论 -
【007】还在用默认编译器?CMake 编译器配置让代码在任何地方都能高效运行!
探讨 CMake 编译器配置,阐述自定义配置的重要性,对比不同配置方法,强调目标属性配置的优势,并提供实战示例,助力构建高质量、可移植的应用。原创 2025-06-13 09:00:00 · 1834 阅读 · 0 评论 -
【006】告别硬编译!CMake 选项配置让你的代码编译更智能
本文深入探讨CMake构建选项和编译定义的高级应用,重点介绍option()和cmake_dependent_option()命令的使用方法。通过静态/动态库示例展示了如何用option()替代硬编码,实现用户可配置的构建选项,并通过-D参数灵活控制构建行为。文章还分析了依赖选项的处理方式,帮助开发者理解这些特性背后的设计思想,在实际项目中构建更高效、可维护的软件系统。通过图形界面或命令行参数,这些特性大幅提升了构建过程的灵活性和可定制性。原创 2025-06-06 09:00:00 · 1111 阅读 · 0 评论 -
【005】CMake 技巧:如何用条件与循环解决90%的构建难题
本文介绍了CMake语言中的条件控制结构,包括if-else、循环等语法,帮助开发者灵活控制项目构建流程。文章详细讲解了字符串/数值比较运算符、逻辑运算符、文件和目录存在性检查等实用功能,并通过一个实际示例演示了如何在"库模式"和"直接编译模式"之间切换构建方式。示例展示了包含头文件和源文件的项目结构,以及对应的CMakeLists.txt配置文件,为开发者提供了CMake条件语句的实用参考。通过合理使用这些控制结构,可以更好地管理复杂项目的构建过程。原创 2025-05-28 09:00:00 · 856 阅读 · 0 评论 -
【004】CMake构建、链接动态库和静态库,就是这么简单!
本文介绍了如何使用CMake构建、链接动态库和静态库,以优化复杂项目的代码组织和编译效率。通过将项目源代码分散在多个子目录中,可以实现模块化、代码重用和关注点分离,从而提高代码的可维护性和编译速度。文章详细展示了如何将Message类封装成独立的模块,并通过CMakeLists.txt文件将其编译为静态库。此外,还介绍了CMake中的目标管理命令,如add_library、target_include_directories等,帮助开发者更好地管理和配置构建目标。原创 2025-05-22 09:00:00 · 1942 阅读 · 0 评论 -
【003】5 分钟搞懂 CMake 变量:零基础也能学会的构建技巧
CMake 变量就是用来存储信息,并在构建过程中被 CMake 调用的!最简单的理解,CMake 变量就是一个名字,对应着一个值。CMake 在构建项目的时候,会根据这些变量的值来做出相应的操作。比如可以把项目名称记录在一个名为的变量里,然后在构建的时候引用它。项目名称、版本号。源文件目录、头文件目录、库文件目录。编译标志 (例如-Wall-O2)、链接选项。指定使用哪个 C++ 编译器 (例如 GCC, Clang)。开启或关闭优化、添加调试信息。告诉链接器要链接哪些库。原创 2025-04-17 09:00:00 · 2453 阅读 · 0 评论 -
【002】CMake 零基础:编写你的第一个 CMakeLists.txt
还在手动编译你的 C++ 项目吗?告别繁琐的命令行,让 CMake 来拯救你!CMakeLists.txt 文件是 CMake 的输入,通过该文件定义项目的构建规则。了解 CMake 的基本命令和语法,将为顺利编写 CMakeLists.txt 打下基础。本文将通过具体的步骤演示如何创建一个简单的 CMakeLists.txt 文件,并配置项目以生成可执行文件,帮助读者快速上手 CMake。原创 2025-04-09 09:00:00 · 1460 阅读 · 0 评论 -
【001】CMake 第一课:什么是 CMake,为什么你需要它?
软件开发的世界里,代码只是第一步。如何将这些代码转换成可执行的程序,就需要构建工具的帮助。今天,我们要一起认识一个非常重要的工具 —— CMake。前面的一篇【不知道怎么学 CMake?这份精炼的学习路线拯救你!】文章详细介绍了CMake的学习路线图。说明了如何从基础概念入手,逐步掌握高级技巧,并结合实践不断探索。你可能会疑惑,什么是 CMake?为什么我们要学习它?简单来说,CMake 就像是一位优秀的“项目经理”,它负责管理你的项目构建过程,让你的代码能够顺利地在各种不同的环境中编译和运行。原创 2025-03-25 09:00:00 · 2642 阅读 · 0 评论 -
不知道怎么学 CMake ?这份精炼的学习路线拯救你!
CMake 作为现代构建工具,核心价值在于跨平台、灵活配置和高效管理。它统一了不同平台的构建流程,简化了复杂的依赖关系,并提供了强大的测试、打包和部署能力。学习 CMake 能够提升开发效率、确保软件质量并简化发布流程。从基础概念入手,逐步掌握高级技巧,并结合实践不断探索,你就能充分利用 CMake 的优势。原创 2025-03-02 21:54:27 · 1492 阅读 · 0 评论
分享