最近お仕事でadd_custom_command()やadd_custom_target()を使う機会があったので、ざっくりとメモしとく。俺だけかもしれないが、こいつらパッと見が似てるからよくわかんなくなるのよね。
ビルドの前後で任意のコマンドを実行したい
VisualStudioとかだと「ビルド前イベント」「ビルド後イベント」みたいなプロパティが設定できるけど、それっぽいことをCMakeでもやりたい。そんなときは「add_custom_command()」を使えば良さげ。
add_executable(test "test.cpp" "test.h") add_custom_command(TARGET test PRE_BUILD COMMAND echo wanwan) add_custom_command(TARGET test POST_BUILD COMMAND echo nya-)
さっそくtestをビルドしてみる。
>cmake --build . --target test wanwan test.vcxproj -> test.exe nya-
すると、ビルド前後で任意のコマンドが実行できていることがわかる。
add_custom_command(TARGET test POST_BUILD COMMAND echo wanwan COMMAND echo nya-)
ちなみに、コマンドを連続で実行したいときはCOMMANDを並べれば良い。
オレオレターゲットを作りたい
ビルド済みのバイナリファイルを組み込み機器に転送したりだとか、ビルド作業とは分ける工程を別途ターゲットで作りたい。そんなときは「add_custom_target()」を使えば良さげ。
add_custom_target(inu echo wanwan) add_custom_target(neko echo nya- DEPENDS inu)
DEPENDSをつけておけば「このターゲット実行してから走らすけん」てなことができる。
>cmake --build . --target inu wanwan
inuをビルドするとそれ単体のコマンドが走るけれども、
>cmake --build . --target neko wanwan nya-
nekoをビルドすると、依存するターゲットinuのコマンドの後でnekoのコマンドが実行される。