在我的cmake文件中,我使用execute_process
运行命令。我想检查一下是否失败。它不会将任何内容打印到stderr
。
到目前为止,我一直在使用运行命令的bash脚本,然后使用$? == 1
检查退出状态。
有没有办法用cmake做类似的事情?
execute_process(COMMAND "runThis")
if("{$?}" EQUAL 1)
message( FATAL_ERROR "Bad exit status")
endif()
我使用cmake 3.12.1
答案 0 :(得分:5)
您可以通过使用RESULT_VARIABLE
调用的execute_process
选项找到执行过程的退出状态。来自选项的documentation:
该变量将设置为包含运行进程的结果。这将是最后一个子代的整数返回码或描述错误情况的字符串。
示例:
execute_process(COMMAND "runThis" RESULT_VARIABLE ret)
if(ret EQUAL "1")
message( FATAL_ERROR "Bad exit status")
endif()
答案 1 :(得分:1)
documentation指示RESULT_VARIABLE
可用于检查execute_process
的状态。由于它可能包含 字符串或退出代码,因此在检查错误时应同时考虑两者。
以下是将其付诸实践的示例:
# good
execute_process(
COMMAND cmake --version
RESULT_VARIABLE STATUS
OUTPUT_VARIABLE OUTPUT1
ERROR_QUIET )
if(STATUS AND NOT STATUS EQUAL 0)
message(STATUS "FAILED: ${STATUS}")
else()
message(STATUS "SUCCESS: ${OUTPUT1}")
endif()
# nonzero exit code
execute_process(
COMMAND cmake -G xxxx
RESULT_VARIABLE STATUS
OUTPUT_VARIABLE OUTPUT2
ERROR_QUIET )
if(STATUS AND NOT STATUS EQUAL 0)
message(STATUS "FAILED: ${STATUS}")
else()
message(STATUS "SUCCESS: ${OUTPUT2}")
endif()
# bad command
execute_process(
COMMAND xxxx
RESULT_VARIABLE STATUS
OUTPUT_VARIABLE OUTPUT3
ERROR_QUIET )
if(STATUS AND NOT STATUS EQUAL 0)
message(STATUS "FAILED: ${STATUS}")
else()
message(STATUS "SUCCESS: ${OUTPUT3}")
endif()
输出:
SUCCESS: cmake version 3.18.0-rc3
CMake suite maintained and supported by Kitware (kitware.com/cmake).
FAILED: 1
FAILED: The system cannot find the file specified