在cmake中检查`execute_process`的退出状态

时间:2018-08-29 12:00:40

标签: cmake

在我的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

2 个答案:

答案 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