模块

使用模块

在软件开发中,代码重用是一种有价值的技术,而 CMake 旨在支持它。允许 CMakeLists 文件使用可重用的模块,使整个社区能够共享可重用的代码部分。对于 CMake,这些部分称为 cmake-modules,可以在安装的 Modules 子目录中找到它们。

模块的位置可以使用模块文件的完整路径指定,也可以让 CMake 自己查找模块。CMake 将在 CMAKE_MODULE_PATH 指定的目录中查找模块;如果无法在该目录中找到模块,它将在 Modules 子目录中查找。通过这种方式,项目可以覆盖 CMake 提供的模块并根据自己的需要自定义它们。模块可以细分为几个主要类别

查找模块

这些模块支持 find_package 命令来确定软件元素(例如标题文件或库)的位置,这些元素属于给定的包。不要直接包含它们。使用 find_package 命令。每个模块都附有文档,描述它找到的包和它提供结果的变量。

实用程序模块

实用程序模块只是将 CMake 命令的部分放入一个文件中;然后可以使用 include 命令将它们包含到其他 CMakeLists 文件中。例如,以下命令将从 CMake 中包含 CheckTypeSize 模块,然后使用它定义的宏。

include(CheckTypeSize)
check_type_size(long SIZEOF_LONG)

这些模块测试系统,以提供有关目标平台或编译器的信息,比如 float 的大小或对 ANSI C++ 流的支持。其中许多模块的名称前缀为 TestCheck,比如 TestBigEndianCheckTypeSize。有些模块试图编译代码以确定正确的结果。在这种情况下,源代码的命名通常与模块相同,但 .c.cxx 扩展名不同。 实用程序模块还提供以 CMake 语言实现的有用宏和函数,主要针对特定的、常见的用例。有关详细信息,请参阅每个模块的文档。