10

によって呼び出されたコマンドの戻り値を取得するにはどうすればよい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失敗したことをどのようにキャッチできますか?

4

1 に答える 1

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
)

そして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()
于 2013-03-10T14:48:48.850 に答える