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>
执行模块命令时的返回代码。