Edited at

cmakeでビルド時にシェルスクリプトを実行する

More than 3 years have passed since last update.

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