FindEnvModules

在 3.15 版本中添加。

定位环境模块实现,并使命令可用于 CMake 脚本以使用它们。这与基于 Lua 的 Lmod 和基于 TCL 的 EnvironmentModules 兼容。

此模块旨在用于在 CTest 脚本 (ctest -S) 中设置编译器和库环境的用例。它也可以在 CMake 脚本 (cmake -P) 中使用。

注意

加载的环境不会在调用进程结束后保留。请勿在项目代码 (CMakeLists.txt 文件) 中使用此模块来加载编译器环境;它在构建期间将不可用。请在运行 CMake 或使用生成的构建系统之前手动加载环境。

示例用法

set(CTEST_BUILD_NAME "CrayLinux-CrayPE-Cray-dynamic")
set(CTEST_BUILD_CONFIGURATION Release)
set(CTEST_BUILD_FLAGS "-k -j8")
set(CTEST_CMAKE_GENERATOR "Unix Makefiles")

...

find_package(EnvModules REQUIRED)

env_module(purge)
env_module(load modules)
env_module(load craype)
env_module(load PrgEnv-cray)
env_module(load craype-knl)
env_module(load cray-mpich)
env_module(load cray-libsci)

set(ENV{CRAYPE_LINK_TYPE} dynamic)

...

结果变量

此模块将在您的项目中设置以下变量

EnvModules_FOUND

如果找到兼容的环境模块框架,则为 True。

缓存变量

将设置以下缓存变量

EnvModules_COMMAND

要使用的底层模块命令。当前支持的实现是基于 Lua 的 Lmod 和基于 TCL 的 EnvironmentModules。

环境变量

ENV{MODULESHOME}

通常由模块环境实现设置,用作定位要执行的模块命令的提示。

提供的函数

这定义了以下 CMake 函数,用于与环境模块交互

env_module

执行任意模块命令

env_module(cmd arg1 ... argN)
env_module(
  COMMAND cmd arg1 ... argN
  [OUTPUT_VARIABLE <out-var>]
  [RESULT_VARIABLE <ret-var>]
)

选项包括

cmd arg1 ... argN

要执行的模块子命令和参数,就像它们直接传递到 shell 环境中的模块命令一样。

OUTPUT_VARIABLE <out-var>

执行模块命令的标准输出。

RESULT_VARIABLE <ret-var>

执行模块命令的返回代码。

env_module_swap

交换一个模块以替换另一个模块

env_module_swap(out_mod in_mod
  [OUTPUT_VARIABLE <out-var>]
  [RESULT_VARIABLE <ret-var>]
)

这在功能上等同于 module swap out_mod in_mod shell 命令。选项包括

OUTPUT_VARIABLE <out-var>

执行模块命令的标准输出。

RESULT_VARIABLE <ret-var>

执行模块命令的返回代码。

env_module_list

检索当前加载的模块列表

env_module_list(<out-var>)

这在功能上等同于 module list shell 命令。结果以 <out-var> 形式存储为正确格式化的 CMake 分号分隔列表 变量。

env_module_avail

检索可用模块的列表

env_module_avail([<mod-prefix>] <out-var>)

这在功能上等同于 module avail <mod-prefix> shell 命令。结果以 <out-var> 形式存储为正确格式化的 CMake 分号分隔列表 变量。