归档
善良比聪明更重要
07
19
CMake 系列(十九):add_subdirectory 的作用域 CMake 系列(十九):add_subdirectory 的作用域
随着项目规模的增长,把所有构建逻辑都集中在一个 CMakeLists.txt 文件里,会让项目越来越难维护。接下来几篇我们讨论构建项目的策略,并限制变量的作用范围和副作用,目的是降低代码的复杂性、简化项目的维护。本文将把一个项目分割成几个范
2022-07-19
12
05
CMake 系列(十七):用函数和宏重用代码 CMake 系列(十七):用函数和宏重用代码
任何编程语言中,函数都允许我们抽象(隐藏)细节并避免代码重复,CMake 也不例外。本篇将以宏和函数为例进行讨论,并介绍一个宏,用于方便地定义测试并设置测试的顺序。我们的目标是定义一个宏,用来替换 add_test 和 set_tests_
2022-07-05
06
28
CMake 系列(十六):用 Google Test 做单元测试 CMake 系列(十六):用 Google Test 做单元测试
本篇演示如何在 CMake 的帮助下使用 Google Test 框架实现单元测试。Google Test 不仅仅是一个头文件,更是一个库,包含需要构建和链接的源文件。可以把它们与我们的代码项目放在一起,但为了使代码项目更加轻量级,我们选择
2022-06-28
21
CMake 系列(十五):检测 Boost 库 CMake 系列(十五):检测 Boost 库
Boost 是一组 C++ 通用库。这些库提供了许多现代 C++ 项目不可或缺、但 C++ 标准尚未提供的功能,例如元编程、处理可选参数和文件系统操作等组件。其中许多特性后来被 C++11、C++14 和 C++17 标准所采纳,但对于需要
2022-06-21
14
CMake 系列(十四):检测 Eigen 库 CMake 系列(十四):检测 Eigen 库
BLAS 库为矩阵和向量操作提供了标准化接口,不过这个接口是用 Fortran 语言书写的。虽然已经展示过如何在 C++ 中直接使用这些库,但在现代 C++ 程序中,我们希望有更高级的接口。 纯头文件实现的 Eigen 库使用模板编程来提供
2022-06-14
07
CMake 系列(十三):检测 Python 库 CMake 系列(十三):检测 Python 库
可以使用 Python 工具来分析和操作程序的输出。然而,还有更强大的方法可以将解释语言(如 Python)与编译语言(如 C 或 C++)组合在一起使用。一种是扩展 Python,通过编译成共享库的 C 或 C++ 模块为 Python
2022-06-07
05
31
CMake 系列(十二):检测 Python 解释器 CMake 系列(十二):检测 Python 解释器
Python 是一种非常流行的语言。许多项目使用 Python 编写的工具来打包主程序和库,或者在配置或构建过程中使用 Python 脚本。在这些情况下,需要确保运行时对 Python 解释器的依赖也得到满足。本示例将展示如何检测和使用 P
2022-05-31
24
CMake 系列(十一):处理与编译器相关的源代码 CMake 系列(十一):处理与编译器相关的源代码
这个方法与前面的方法类似:我们将使用 CMake 来编译依赖于环境的条件源代码,本例中该依赖是编译器。为了可移植性,我们应尽量避免编写新代码,但遇到有依赖的情况也要去解决,特别是在使用历史代码或处理编译器相关工具(如 sanitizers)
2022-05-24
17
CMake 系列(十):处理与平台相关的源代码 CMake 系列(十):处理与平台相关的源代码
理想情况下,应该避免依赖于平台的源代码,但是有时我们没有选择,特别是当要求配置和编译不是自己编写的代码时。本示例中,将演示如何使用 CMake 根据操作系统编译源代码。 提示:本示例包含一个 C++ 示例,在 CMake 3.5 或更高版
2022-05-17
10
CMake 系列(九):检测操作系统 CMake 系列(九):检测操作系统
CMake 是一组跨平台工具。不过,了解操作系统(OS)上执行的配置或构建步骤也很重要,与操作系统相关的 CMake 代码会根据操作系统启用条件编译,或者在可用或必要时使用特定于编译器的扩展。本示例中,我们将通过一个不需要编译任何源代码的示
2022-05-10
03
CMake 系列(八):脚本控制流 CMake 系列(八):脚本控制流
本章前面的示例中,已经使用过 if-else-endif。CMake 还提供了创建循环的语言工具:foreach-endforeach 和 while-endwhile。两者都可以与 break() 结合使用,以便尽早从循环中跳出。本示例将
2022-05-03
3 / 5