我正在尝试从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()