我如何获取由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))
Run Code Online (Sandbox Code Playgroud)
但那不行.我发现即使是平原
macro(mac)
endmacro()
add_custom_command(COMMAND mac())
Run Code Online (Sandbox Code Playgroud)
不起作用.在建设时,sh抱怨:
/bin/sh: 1: Syntax error: end of file unexpected
Run Code Online (Sandbox Code Playgroud)
或者,如果我不使用宏,但称execute_process在add_custom_command本身:
/bin/sh: 1: Syntax error: word unexpected (expecting ")")
Run Code Online (Sandbox Code Playgroud)
我想这add_custom_command不会指望传递宏或内置函数.但是,如何从命令中获取返回值add_custom_command?或者,不那么具体,我怎么能抓住命令add_custom_command失败?
DLR*_*ave 17
add_custom_command运行的命令在构建时间之前不会运行,因此您无法在CMake的配置/生成步骤中"捕获"它们失败.
如果自定义命令失败,那么任何依赖于该自定义命令输出的内容都将被避免,因为make之后会停止,或者如果make在错误之后继续运行,它最终会在结束时返回错误,并给出某种排序"失败的构建"消息.
您始终可以编写作为自定义命令运行的等效脚本,然后在该脚本中,在某些类型的错误之后执行某些操作.如果在-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
)
Run Code Online (Sandbox Code Playgroud)
然后在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()
Run Code Online (Sandbox Code Playgroud)