无法在生成的 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()
我正在尝试从 CMake
中的可执行文件的调用中获取输出作为在构建系统中处理的字符串。这是我将使用 add_test
.
在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()