gpt4 book ai didi

cmake - 赶在CMake的add_custom_command返回值?

转载 作者:行者123 更新时间:2023-12-04 03:12:20 25 4
gpt4 key购买 nike

如何获取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的配置/生成步骤中失败。

如果自定义命令失败,则将避免任何依赖于该自定义命令输出的内容,因为在此之后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
)

然后在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()

关于cmake - 赶在CMake的add_custom_command返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15322547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com