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 命令。結果會以適當格式化的 CMake 分號分隔列表 變數儲存在 <out-var> 中。

env_module_avail

檢索可用模組的列表

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

這在功能上等同於 module avail <mod-prefix> shell 命令。結果會以適當格式化的 CMake 分號分隔列表 變數儲存在 <out-var> 中。