cmakeはmakeと違ってシェルスクリプトどうやって走らせればいいか分らない、
そう思っていませんか?
他のファイルを生成しない場合
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.ccとKSE.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を生成してくれます。