1. ホーム
  2. リナックス

cmake: execute_process を使ってシェルコマンドやスクリプトを呼び出す。

2022-02-26 06:06:36

CMakeはexecute_processでシェルコマンドやスクリプトを呼び出すことができ、そのプロトタイプは以下の通りです。

execute_process(COMMAND <cmd1> [args1...]]
                [COMMAND <cmd2> [args2...]] [...]]
                [WORKING_DIRECTORY <directory>]
                [TIMEOUT <seconds>]
                [RESULT_VARIABLE <variable>]
                [OUTPUT_VARIABLE <variable>]
                [ERROR_VARIABLE <variable>]
                [INPUT_FILE <file>]
                [OUTPUT_FILE <file>]
                [ERROR_FILE <file>]
                [OUTPUT_QUIET]
                [ERROR_QUIET]
                [OUTPUT_STRIP_TRAILING_WHITESPACE]
                [ERROR_STRIP_TRAILING_WHITESPACE])

1つまたは複数のコマンドを指定された順序で実行し、各プロセスの出力を次のプロセスへの入力としてパイプライン接続します。すべてのプロセスで、単一の標準エラー出力パイプラインが使用されます。
WORKING_DIRECTORY が指定された場合、指定されたディレクトリが子プロセスの現在の作業ディレクトリとして使用されます。

TIMEOUT 値が指定された場合、子プロセスの実行が指定時間(秒単位、小数点以下も可)以内に終了しない場合、その実行は中断されます。

RESULT_VARIABLE 変数が指定された場合、最後のコマンドの実行結果がこの変数に格納され、最後の子プロセスの実行終了後の戻り値または何らかのエラーメッセージを記述した文字列が格納されます。

OUTPUT_VARIABLE 変数と ERROR_VARIABLE 変数が指定された場合、それぞれ標準出力と標準エラー出力の内容を保持します。

同じ変数が指定された場合、出力は生成された順にその変数に格納されます。

INPUT_FILE、UTPUT_FILE、ERROR_FILE などのファイル名が指定された場合、それぞれ最初の子プロセスの標準入力、 最後の子プロセスの標準出力、すべての子プロセスの標準エラー出力と関連づけられる。

OUTPUT_QUIET または ERROR_QUIET が指定された場合、標準出力とエラー出力は無視されます。同じパイプラインで複数のOUTPUT_*またはERROR_*オプションを同時に指定した場合、優先順位は不明である(これは避けるべきである)。

OUTPUT_* または ERROR_* オプションをいずれも指定しなかった場合、CMake コマンドが実行されているプロセスで出力パイプラインを共有します。

1. シェルコマンドを実行する

execute_process(COMMAND <a shell command> WORKING_DIRECTORY <the working directory where this shell command is executed>)

2. シェルスクリプトを実行する

execute_process(COMMAND sh test.sh WORKING_DIRECTORY <test.sh directory>)

注意:1つのexecute_processを呼び出すと、複数のCOMMANDコマンドを連続して実行することができます。

拡張:cmakeではadd_custom_comandとadd_custom_targetによってシェルコマンドを実行することもできますが、これらはターゲットの生成に関連する一般的な実行コマンドです。execute_processはcmakeがコンパイルを実行する前に単にシェルコマンドを呼び出しますが、特定の あなたの必要性に応じてこれらのコマンドの使用を選択する必要があります!

add_custom_comand と add_custom_target は、以下の場所にあります。 https://blog.csdn.net/fuyajun01/article/details/8907207

参考:cmake公式サイト https://cmake.org/cmake/help/v3.7/command/execute_process.html