見出し画像

【CMake】add_customなにがし

※2020年頃に別ブログで書いた記事の移植版です。

add_customを混同しちゃう問題

最近お仕事で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のコマンドが実行される。

この記事が気に入ったらサポートをしてみませんか?