在 CMake 中缓存 execute_process 的结果

Cache result of execute_process in CMake

作为项目配置过程的一部分,我需要使用 execute_process 查询命令行工具,以检索其余流程所需的变量。此查询的输入取决于配置选项。

execute_process 调用的特定命令恰好相当昂贵,因此我想避免重新运行 除非输入已更改。

如何“缓存”execute_process 的结果,以便仅在某个 CMake 选项更改时才重新运行(即,而不是每当 anything 会触发 CMake 再次 运行 的更改)?


示例代码:

set(MY_INPUT_VARIABLE "my_default" CACHE STRING "Used by command line tool.")

# This should only be re-run if MY_INPUT_VARIABLE changed since last time it was run
execute_process(COMMAND slow_executable ${MY_INPUT_VARIABLE} OUTPUT_VARIABLE RESULT)

将值复制到 INTERNAL 缓存变量并将其与缓存变量的当前版本进行比较。

set(MY_INPUT_VARIABLE "my_default" CACHE STRING "Used by command line tool.")
set(MY_INPUT_VARIABLE_INTERNAL "" CACHE INTERNAL "for internal use only; do not modify")

if (NOT MY_INPUT_VARIABLE STREQUAL MY_INPUT_VARIABLE_INTERNAL)
    execute_process(COMMAND slow_executable ${MY_INPUT_VARIABLE} OUTPUT_VARIABLE RESULT)
    set(MY_INPUT_VARIABLE_INTERNAL ${MY_INPUT_VARIABLE} CACHE INTERNAL "for internal use only; do not modify")
endif()

请注意,您也可以使用不同类型的缓存变量,但需要使用 FORCE 来覆盖该值。除此之外,cmake-gui 还会显示这样的缓存变量。