无法在生成的 CMake 脚本中设置变量

Cannot set variables in generated CMake script

我正在尝试从 CMake 中的可执行文件的调用中获取输出作为在构建系统中处理的字符串。这是我将使用 add_test.

添加到 CTest 工具的测试套件列表

CMakeLists.txt

...(After adding the mlpack_test target)...
configure_file(generate_test_names.cmake.in generate_test_names.cmake)
add_custom_command(TARGET mlpack_test
  POST_BUILD
  COMMAND ${CMAKE_COMMAND} -P generate_test_names.cmake
)

generate_test_names.cmake.in

function(get_names)
  message("Adding tests to the test suite")
  execute_process(COMMAND ${CMAKE_BINARY_DIR}/bin/mlpack_test --list_content
    OUTPUT_VARIABLE FOO)
  message(STATUS "FOO='${FOO}'")
endfunction()

get_names()

脚本被执行,我可以在构建的 stdout 中看到 mlpack_test --list_content 的输出。但是 FOO 仍然是一个空字符串。

输出:

Adding tests to the test suite
ActivationFunctionsTest*
    TanhFunctionTest*
    LogisticFunctionTest*
    SoftsignFunctionTest*
    IdentityFunctionTest*
    RectifierFunctionTest*
    LeakyReLUFunctionTest*
    HardTanHFunctionTest*
    ELUFunctionTest*
    SoftplusFunctionTest*
    PReLUFunctionTest*
-- FOO=''

为什么 OUTPUT_VARIABLE 的参数没有用执行的进程的 stdout 初始化?

当使用 configure_file 生成 CMake 脚本时,最好为该命令使用 @ONLY 选项:

configure_file(generate_test_names.cmake.in generate_test_names.cmake @ONLY)

在那种情况下,只有 @var@ 个引用将被替换为变量的值,但 ${var} 个引用保持不变不变:

function(get_names)
  message("Adding tests to the test suite")
  # CMAKE_BINARY_DIR will be replaced with the actual value of the variable
  execute_process(COMMAND @CMAKE_BINARY_DIR@/bin/mlpack_test --list_content
    OUTPUT_VARIABLE FOO)
  # But FOO will not be replaced by 'configure_file'.
  message(STATUS "FOO='${FOO}'")
endfunction()

get_names()