LoginSignup
24
17

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-05-26

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

24
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
17