我该如何抓住通过调用命令的返回值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_process
在add_custom_command
本身:
/bin/sh: 1: Syntax error: word unexpected (expecting ")")
我想这add_custom_command
并不指望宏或内置函数传递。 但是,我怎么能得到从命令的返回值add_custom_command
? 或者,不太具体,我怎么能赶上在命令add_custom_command
失败了吗?
通过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()