分类
善良比聪明更重要
CMake 系列(二十二):让 CMake 支持 GDB 调试 CMake 系列(二十二):让 CMake 支持 GDB 调试
CMake 和 GDB 的结合确实能使 C 或 C++ 的开发工作变得轻松,它们可以共同实现跨平台的项目构建和源代码级别的调试。本文详细介绍如何使用 CMake 配置项目以便使用 GDB 进行调试,并给出一个 C 语言的 demo。 如何支
2022-08-09
CMake 系列(二十一):链接动态库并指定路径的多种方法 CMake 系列(二十一):链接动态库并指定路径的多种方法
实际开发中,需要链接的动态库往往不在系统默认的搜索路径上,这时就需要在 CMake 中显式指定库的位置。本文整理了链接动态库并指定其路径的几种常用方法,并比较各自的适用场景和优缺点。 方法 1:使用 link_directories 指定全
2022-08-02
CMake 系列(二十):用 target_sources 避免全局变量 CMake 系列(二十):用 target_sources 避免全局变量
上一篇使用 add_subdirectory() 把项目分割成几个范围有限的 CMakeLists.txt 文件。本文讨论另一种方法:不使用 add_subdirectory(),而是使用模块 include 来组装不同的 CMakeLis
2022-07-26
CMake 系列(十九):add_subdirectory 的作用域 CMake 系列(十九):add_subdirectory 的作用域
随着项目规模的增长,把所有构建逻辑都集中在一个 CMakeLists.txt 文件里,会让项目越来越难维护。接下来几篇我们讨论构建项目的策略,并限制变量的作用范围和副作用,目的是降低代码的复杂性、简化项目的维护。本文将把一个项目分割成几个范
2022-07-19
CMake 系列(十八):将 CMake 源码分成模块 CMake 系列(十八):将 CMake 源码分成模块
项目通常从单个 CMakeLists.txt 文件开始,随着时间的推移,这个文件会逐渐增长。本篇演示一种将 CMakeLists.txt 拆分成更小单元的机制。将 CMakeLists.txt 拆分为模块有几个动机,这些模块可以包含在主 C
2022-07-12
CMake 系列(十七):用函数和宏重用代码 CMake 系列(十七):用函数和宏重用代码
任何编程语言中,函数都允许我们抽象(隐藏)细节并避免代码重复,CMake 也不例外。本篇将以宏和函数为例进行讨论,并介绍一个宏,用于方便地定义测试并设置测试的顺序。我们的目标是定义一个宏,用来替换 add_test 和 set_tests_
2022-07-05
CMake 系列(十六):用 Google Test 做单元测试 CMake 系列(十六):用 Google Test 做单元测试
本篇演示如何在 CMake 的帮助下使用 Google Test 框架实现单元测试。Google Test 不仅仅是一个头文件,更是一个库,包含需要构建和链接的源文件。可以把它们与我们的代码项目放在一起,但为了使代码项目更加轻量级,我们选择
2022-06-28
CMake 系列(十五):检测 Boost 库 CMake 系列(十五):检测 Boost 库
Boost 是一组 C++ 通用库。这些库提供了许多现代 C++ 项目不可或缺、但 C++ 标准尚未提供的功能,例如元编程、处理可选参数和文件系统操作等组件。其中许多特性后来被 C++11、C++14 和 C++17 标准所采纳,但对于需要
2022-06-21
CMake 系列(十四):检测 Eigen 库 CMake 系列(十四):检测 Eigen 库
BLAS 库为矩阵和向量操作提供了标准化接口,不过这个接口是用 Fortran 语言书写的。虽然已经展示过如何在 C++ 中直接使用这些库,但在现代 C++ 程序中,我们希望有更高级的接口。 纯头文件实现的 Eigen 库使用模板编程来提供
2022-06-14
CMake 系列(十三):检测 Python 库 CMake 系列(十三):检测 Python 库
可以使用 Python 工具来分析和操作程序的输出。然而,还有更强大的方法可以将解释语言(如 Python)与编译语言(如 C 或 C++)组合在一起使用。一种是扩展 Python,通过编译成共享库的 C 或 C++ 模块为 Python
2022-06-07
CMake 系列(十二):检测 Python 解释器 CMake 系列(十二):检测 Python 解释器
Python 是一种非常流行的语言。许多项目使用 Python 编写的工具来打包主程序和库,或者在配置或构建过程中使用 Python 脚本。在这些情况下,需要确保运行时对 Python 解释器的依赖也得到满足。本示例将展示如何检测和使用 P
2022-05-31
CMake 系列(十一):处理与编译器相关的源代码 CMake 系列(十一):处理与编译器相关的源代码
这个方法与前面的方法类似:我们将使用 CMake 来编译依赖于环境的条件源代码,本例中该依赖是编译器。为了可移植性,我们应尽量避免编写新代码,但遇到有依赖的情况也要去解决,特别是在使用历史代码或处理编译器相关工具(如 sanitizers)
2022-05-24
1 / 2