cmake: execute_process を使ってシェルコマンドやスクリプトを呼び出す。
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
関連
-
linuxのインストールファイルでは、configure: error: no acceptable C compiler found in $PATH errorが表示されます。
-
[シェルプログラミング】シェルスクリプトの実行エラー: シンタックスエラー: 予期せぬファイルの終了
-
MongoDBインストール+解決エラー。mongod.service の起動に失敗しました:until not found
-
Python easy_install は "ImportError: pkg_resources という名前のモジュールがありません" というエラーが発生しました。
-
Ubuntu next install nginx,make: *** `default'が必要とする `build' をターゲットとするルールがありません。停止します。
-
vsftpdの悲しい "550 Failed to change directory "エラー
-
UBUNTUの一般的なエラーと解決策
-
ArchLinux での i3wm の簡単な設定と美化
-
debian(wheezy) gvim GConf-WARNING **: クライアントが D-BUS デーモンへの接続に失敗しました。
-
SSL:EE_KEY_TOO_SMALLの解決方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
undefinedmakefile のエラー *** セパレータがありません。
-
[Linux] [コンパイル] libmpc.so.3: cannot open shared object file: そのようなファイルまたはディレクトリはありません
-
MySQL5.7 のパスワード変更で ERROR 1054 (42S22) が発生しました。fie'内の不明なカラム'password'が見つかりません。
-
PM2管理用バックエンド・プログラムのLinuxへのインストールと使用方法
-
550ディレクトリの変更に失敗しました
-
-bash: !" : イベントが見つかりません
-
マルチスレッドプログラミング警告: 異なるサイズの整数からポインタへのキャスト [-Wint-to-pointer-cast] エラーが解決されました。
-
強力なコマンドであるcurlの紹介と一般的な使用方法
-
Recvに失敗しました。相手側で接続がリセットされた エラーの解決
-
イメージ 'mysql:latest' がローカルに見つからないバージョン番号