【发布时间】:2017-06-04 07:58:48
【问题描述】:
我试图从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 初始化?
【问题讨论】:
-
很可能,您在构建输出中看到的是已执行进程的stderr。您可以为
execute_process传递附加选项ERROR_VARIABLE FOO,因此它的整个输出 将被重定向到FOO 变量中。 -
我试过你的建议,但
FOO仍然是空的。我还注意到我无法在脚本中定义任何变量,即。即使set(myvar 1)myvar为空。 -
命令
configure_file替换${var}的所有出现 ...您可能希望将@ONLY参数传递给命令,因此它将仅替换@var@实例。顺便说一句,您可以检查生成文件generate_test_names.cmake的内容。 -
@Tsyvarev 非常感谢!添加@ONLY 有效。应该更仔细地检查
configure_file的文档。 -
@Tsyvarev 您介意将其添加为问题的答案吗? :)