| 56行目: | 56行目: | ||
== execute_processコマンド == | == execute_processコマンド == | ||
外部コマンドを実行して戻り値を取得することができる。<br> | 外部コマンドを実行して戻り値を取得することができる。<br> | ||
戻り値が0以外の場合は、エラーが発生したことを示す。<br> | 戻り値が0以外の場合は、エラーが発生したことを示す。<br> | ||
<br> | <br> | ||
| 65行目: | 64行目: | ||
例えば、lsコマンドでは、戻り値が0ではない場合はエラーメッセージが出力される。<br> | 例えば、lsコマンドでは、戻り値が0ではない場合はエラーメッセージが出力される。<br> | ||
以下の例では、変数名LS_RESULTには、lsコマンドの戻り値が格納される。<br> | 以下の例では、変数名LS_RESULTには、lsコマンドの戻り値が格納される。<br> | ||
<br> | |||
<syntaxhighlight lang="cmake"> | <syntaxhighlight lang="cmake"> | ||
# lsコマンドを実行して戻り値を取得する場合 | # lsコマンドを実行して戻り値を取得する場合 | ||
| 71行目: | 71行目: | ||
if(LS_RESULT) | if(LS_RESULT) | ||
message("ls command failed with error code ${LS_RESULT}") | message("ls command failed with error code ${LS_RESULT}") | ||
endif() | |||
</syntaxhighlight> | |||
<br> | |||
以下の例では、Gitのバージョン管理システムからタグ情報を取得している。<br> | |||
ビルドバージョンの自動生成やバージョン情報の埋め込み等を行うことができる。<br> | |||
<syntaxhighlight lang="cmake"> | |||
execute_process( | |||
# Gitのタグ情報を取得するコマンドを実行 | |||
COMMAND git describe --tags | |||
# コマンドを実行するディレクトリをプロジェクトのルートディレクトリに設定 | |||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} | |||
# コマンドの終了コードを GIT_RESULT 変数に格納 | |||
RESULT_VARIABLE GIT_RESULT | |||
# コマンドの標準出力を GIT_VERSION 変数に格納 | |||
OUTPUT_VARIABLE GIT_VERSION | |||
# エラーが発生した場合の出力を GIT_ERROR 変数に格納 | |||
ERROR_VARIABLE GIT_ERROR | |||
# 出力から末尾の空白文字や改行を削除 | |||
OUTPUT_STRIP_TRAILING_WHITESPACE | |||
) | |||
# コマンドが失敗した場合 (終了コードが0以外) の処理 | |||
if(NOT GIT_RESULT EQUAL 0) | |||
# 警告メッセージを表示 | |||
message(WARNING "Git command failed : ${GIT_ERROR}") | |||
endif() | |||
</syntaxhighlight> | |||
<br> | |||
以下の例では、ls -lコマンドでディレクトリ内のファイル一覧を詳細形式で取得して、その出力をgrep ".txt"コマンドにパイプで渡して、テキストファイルのみを抽出している。<br> | |||
また、その結果を変数TEXT_FILESに格納している。<br> | |||
<syntaxhighlight lang="cmake"> | |||
execute_process( | |||
# ls -lコマンドでファイル一覧を取得 | |||
COMMAND ls -l | |||
# ファイル一覧からテキストファイル (.txt拡張子) を含む行を抽出 | |||
COMMAND grep ".txt" | |||
# コマンドを実行するディレクトリを設定 | |||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} | |||
# コマンドの実行結果 (終了コード) を格納 | |||
# 0 : コマンドが正常に終了 | |||
# 非0 : コマンドが何らかのエラーで終了 | |||
RESULT_VARIABLE SEARCH_RESULT | |||
# 結果を TEXT_FILES 変数に格納 | |||
OUTPUT_VARIABLE TEXT_FILES | |||
# コマンドの標準エラー出力 (stderr) の内容を格納 | |||
# コマンド実行中にエラーが発生した場合、そのエラーメッセージがこの変数に格納される | |||
ERROR_VARIABLE SEARCH_ERROR | |||
) | |||
if(SEARCH_RESULT EQUAL 0) | |||
message(STATUS "Command executed successfully") | |||
else() | |||
message(WARNING "File search failed : ${SEARCH_ERROR}") | |||
endif() | endif() | ||
</syntaxhighlight> | </syntaxhighlight> | ||