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
を生成してくれます。