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



我正在尝试从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=''

为什么不使用执行该过程的stdout初始化OUTPUT_VARIABLE的参数?

当使用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()

相关内容

  • 没有找到相关文章

最新更新