シェルスクリプトの実行

他のファイルを生成しない場合

ctagsやdoxygenのように、他のソースのコンパイルに関係ない物を生成するためには add_custom_targetを使います:

add_custom_target(ctags ALL COMMAND "ctags" "-R" "-f" ".tags" "--languages=C++,python" "--exclude='CMake*'")
add_custom_target(document COMMAND "doxygen" "doc/Doxyfile")

COMMAND以下に実行したいシェルスクリプトを記述します。 ALLを付けると毎回のmakeで自動的に実行されます。

ファイルを生成する場合

例えばプロジェクトKSEで使用するProtocol buffersのコードを生成したい場合、 KSE.pb.ccKSE.pb.hが生成され、それをコンパイルする必要があります。 この場合はadd_custom_commandを使用します:

add_custom_command(
  OUTPUT KSE.pb.cc KSE.pb.h
  DEPENDS KSE.proto
  COMMAND "protoc" "KSE.proto" "--cpp_out=." "--python_out=."
)

これによりターゲットにKSE.pb.cc, KSE.pb.hが追加され

make KSE.pb.cc

KSE.pb.ccが生成されます。 もちろん依存関係は自動で解決されますので、

add_library(KSE STATIC
  logger.cpp
  KSE.pb.cc
)

のようにある場合は勝手にKSE.pb.ccを生成してくれます。