Git が dirty か判定する方法と CMake での応用例


方法

git diff --shortstat --exit-code --quiet
  • 結果が 0 である -> dirty ではない
  • 結果が 0 ではない -> dirty である

実用例

CMake での応用

execute_process(
  COMMAND git diff --shortstat --exit-code --quiet
  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  RESULT_VARIABLE version_git_dirty_flag
)

if( version_git_dirty_flag )
  message( "repository is dirty." )
endif()

Git リポジトリーの状態により branch や commit と併せて target_compile_options で渡して翻訳するソース内で使ったり、cmake の処理で扱いたい場合に使う。

Note

  • コマンドが出力する result とシェルの世界の true/false 、 cmake の世界の true/false それぞれ混乱しないように取り扱い注意。

Reference