分类
善良比聪明更重要
CMake 系列(十):处理与平台相关的源代码 CMake 系列(十):处理与平台相关的源代码
理想情况下,应该避免依赖于平台的源代码,但是有时我们没有选择,特别是当要求配置和编译不是自己编写的代码时。本示例中,将演示如何使用 CMake 根据操作系统编译源代码。 提示:本示例包含一个 C++ 示例,在 CMake 3.5 或更高版
2022-05-17
CMake 系列(九):检测操作系统 CMake 系列(九):检测操作系统
CMake 是一组跨平台工具。不过,了解操作系统(OS)上执行的配置或构建步骤也很重要,与操作系统相关的 CMake 代码会根据操作系统启用条件编译,或者在可用或必要时使用特定于编译器的扩展。本示例中,我们将通过一个不需要编译任何源代码的示
2022-05-10
CMake 系列(八):脚本控制流 CMake 系列(八):脚本控制流
本章前面的示例中,已经使用过 if-else-endif。CMake 还提供了创建循环的语言工具:foreach-endforeach 和 while-endwhile。两者都可以与 break() 结合使用,以便尽早从循环中跳出。本示例将
2022-05-03
CMake 系列(七):设置编译器选项 CMake 系列(七):设置编译器选项
前面的示例展示了如何探测 CMake,从而获得关于编译器的信息,以及如何切换项目中的编译器。本篇的任务是控制项目的编译器标志。CMake 为调整或扩展编译器标志提供了很大的灵活性,可以选择下面两种方法: CMake 将编译选项视为目标属性
2022-04-26
CMake 系列(六):切换构建类型 CMake 系列(六):切换构建类型
CMake 可以配置构建类型,例如 Debug、Release 等。配置时,可以为 Debug 或 Release 构建设置相关的选项或属性,例如编译器和链接器标志。控制生成构建系统使用的配置变量是 CMAKE_BUILD_TYPE。该变量
2022-04-19
CMake 系列(五):指定编译器 CMake 系列(五):指定编译器
前面的示例中,我们还没有过多考虑如何选择编译器。CMake 可以根据平台和生成器选择编译器,还能将编译器标志设置为默认值。然而,我们通常希望能够控制编译器的选择。后面的示例中,我们还将考虑构建类型的选择,并展示如何控制编译器标志。 提示:
2022-04-12
CMake 系列(四):用条件控制编译 CMake 系列(四):用条件控制编译
前面几篇的示例比较简单,CMake 的执行流是线性的:从一组源文件到单个可执行文件,或者再生成静态库/动态库。为了确保完全控制构建项目、配置、编译和链接所涉及的所有步骤的执行流,CMake 提供了自己的语言。本篇将探索条件结构 if-els
2022-04-05
CMake 系列(三):构建和链接静态库与动态库 CMake 系列(三):构建和链接静态库与动态库
上一篇中,我们只用单个源文件构建可执行文件。实际项目中往往会有多个源文件,通常分布在不同子目录中。这种实践有助于理顺项目的源代码结构,支持模块化、代码重用和关注点分离,还可以简化并加速项目的重新编译。本篇将展示如何将源代码编译成库,以及如何
2022-03-29
CMake 系列(二):切换构建生成器 CMake 系列(二):切换构建生成器
CMake 是一个构建系统生成器,可以使用单个 CMakeLists.txt 为不同平台上的不同工具集配置项目。您可以在 CMakeLists.txt 中描述构建系统必须执行的操作,以配置并编译代码;基于这些指令,CMake 将为所选的构建
2022-03-22
CMake 系列(一):编译第一个可执行文件 CMake 系列(一):编译第一个可执行文件
本篇将演示如何用 CMake 配置并构建一个最简单的项目:整个项目只有一个源文件,最终生成一个可执行文件。我们以 C++ 为例进行讨论。 提示:本示例在 CMake 3.5 或更高版本中有效,并已在 GNU/Linux、macOS 和 W
2022-03-15
CMake 系列导读:从第一个可执行文件到工程化构建的完整路径 CMake 系列导读:从第一个可执行文件到工程化构建的完整路径
这个系列把 CMake 的核心用法整理成了一条由浅入深的完整路径:从把单个源文件编译成可执行文件的第一步开始,经过构建类型与编译器选项的精细控制,进入操作系统与外部库的环境检测,再到函数、宏、模块化的工程化组织,最后以动态库链接和 GDB
2022-03-14
2 / 2