在CMake的add_custom_command捕捞的返回值?(catch return valu

2019-07-21 06:36发布

我该如何抓住通过调用命令的返回值add_custom_command

我想我可以做这样的事情,

macro(mac param1)
    execute_process(COMMAND process ${param1} RESULT_VARIABLE res_var)
    if(${res_var} ....

endmacro(mac)

add_custom_command(COMMAND mac(param1))

但是这是行不通的。 我发现,即使是普通的

macro(mac)
endmacro()

add_custom_command(COMMAND mac())

不工作。 在建筑,SH抱怨:

/bin/sh: 1: Syntax error: end of file unexpected

或者,如果我不使用宏,但拨打execute_processadd_custom_command本身:

/bin/sh: 1: Syntax error: word unexpected (expecting ")")

我想这add_custom_command并不指望宏或内置函数传递。 但是,我怎么能得到从命令的返回值add_custom_command ? 或者,不太具体,我怎么能赶上在命令add_custom_command失败了吗?

Answer 1:

通过add_custom_command运行的命令不会运行,直到编译时间,所以你不能“赶”他们的CMake的配置过程中失败/生成步骤。

如果因为化妆后停止,或化妆不断错误后走,它最终将在缔结返回一个错误,并给予某种自定义命令失败,那么任何依赖于输出自定义命令的要么是可以避免的,的“构建失败”的消息。

你总是可以编写运行的自定义命令等效脚本,然后在脚本中,某些类型的错误后,做一些事情。 如果您使用-P脚本处理模式cmake的,你可以做一个跨平台脚本调用execute_process和分析的返回值。

例如:

configure_file(
  ${CMAKE_CURRENT_SOURCE_DIR}/script.cmake.in
  ${CMAKE_CURRENT_BINARY_DIR}/script.cmake
  COPYONLY
)
add_custom_command(COMMAND ${CMAKE_COMMAND} -P
  ${CMAKE_CURRENT_BINARY_DIR}/script.cmake
)

然后在script.cmake.in:

execute_process(COMMAND process param1 RESULT_VARIABLE res_var)
if(NOT "${res_var}" STREQUAL "0")
  # do something here about the failed "process" call...
  message(FATAL_ERROR "process failed res_var='${res_var}'")
endif()


文章来源: catch return value in CMake add_custom_command?
标签: cmake