0
我試圖從CMake
中調用一個可執行文件的輸出作爲在構建系統中處理的字符串。這是一個測試套件列表,我將使用add_test
添加到CTest工具。無法在生成的CMake腳本中設置變量
在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 *變量。 – Tsyvarev
我試過你的建議,但'FOO'仍然是空的。我還注意到,我無法在腳本中定義任何變量,即。即使在set(myvar 1)之後,myvar也是空的。 – bluefog
命令'configure_file'替換** $'var}'的所有出現** ...您可能希望將'@ ONLY'參數傳遞給該命令,因此它只會替換'@ var @'實例。順便說一句,你可以檢查生成的文件'generate_test_names.cmake'的內容。 – Tsyvarev