web-dev-qa-db-ja.com

CMakeを介してbashコマンドを実行する

CMakeに3つのbashコマンドまたはbashスクリプトを実行させようとしています。しかし、私はそれを機能させることができないようです。

Bashコマンドは次のとおりです。

    cd ${CMAKE_SOURCE_DIR}/dependencies/library
    make
    cd ${CMAKE_BINARY_DIR}

基本的に、CMakeにライブラリがまだ存在しない場合は、そのディレクトリにライブラリを構築してもらいます。

これが私が試したCMakeコードです:

if(NOT "${CMAKE_SOURCE_DIR}/dependencies/library/lib.o")
   execute_process(COMMAND cd ${CMAKE_SOURCE_DIR}/dependencies/library)
   execute_process(COMMAND make)
   execute_process(COMMAND cd ${CMAKE_BINARY_DIR})
endif(NOT "${CMAKE_SOURCE_DIR}/dependencies/library/lib.o")

ただし、何も構築していません。何が悪いのですか?

また、私はここでこれを求めています:バイナリフォルダーに移動する3番目のコマンドを含める必要がありますか?

ありがとう!

15

execute_process() は構成時に実行されます。しかし、ビルド時にこれを実行したいので、 add_custom_command() および add_custom_target() が探しているものです。

この特別なケースでは、出力ファイルを生成したいので、add_custom_command()を実行する必要があります(どちらも基本的に同じですが、commandは1つまたは複数の出力ファイルを生成しますが、target ではない。

このためのcmakeスニペットは次のようになります。

_add_custom_command(
    OUTPUT ${CMAKE_SOURCE_DIR}/dependencies/library/lib.o
    WORKING_DIR ${CMAKE_SOURCE_DIR}/dependencies/library
    COMMAND make
)
_

次に、出力ファイルを依存関係として別のターゲットに追加する必要があり、すべてが(うまくいけば)期待どおりに機能するはずです。

また、DEPENDSステートメントをadd_custom_command()呼び出しに追加して、一部の入力ソースが変更された場合にオブジェクトファイルを再構築することもできます。

19
Phil Be