CMakeの記述方法

変数

内容

CHOREONOID_DEFINITIONS

コンパイルオプション

CHOREONOID_INCLUDE_DIRS

ヘッダファイルのディレクトリ

CHOREONOID_LIBRARY_DIRS

ライブラリファイルのディレクトリ

CHOREONOID_UTIL_LIBRARIES

Utilモジュール使用時にリンクすべきライブラリ

CHOREONOID_BASE_LIBRARIES

Baseモジュール使用時にリンクすべきライブラリ

CHOREONOID_PLUGIN_DIR

プラグインファイルをインストールするディレクトリ

次に、find_packageによって取得された情報を以下のように使用しています。

add_definitions(${CHOREONOID_DEFINITIONS})
include_directories(${CHOREONOID_INCLUDE_DIRS})
link_directories(${CHOREONOID_LIBRARY_DIRS})

この記述により、コンパイルオプション、インクルードパス、リンクパスが適切に設定されます。

set(target CnoidHelloWorldPlugin)

プラグイン名を変数targetに設定しています。

add_library(${target} SHARED HelloWorldPlugin.cpp)

プラグインは共有ライブラリになりますので、CMake標準のadd_libraryコマンドでビルドを行うことができます。

Choreonoid本体とまとめてビルドする では、add_libraryを拡張したchoreonoid_add_pluginというコマンドでプラグインをビルドしましたが、プラグインを単体でビルドする場合は直接add_libaryを使用するようにします。

target_link_libraries(${target} ${CHOREONOID_BASE_LIBRARIES})

プラグインにリンクすべきライブラリを指定しています。find_packageで取得されたCHOREONOID_BASE_LIBRARIES変数を使用することで、プラグインの基盤となるライブラリ一式をリンクすることができます。

install(TARGETS ${target} LIBRARY DESTINATION ${CHOREONOID_PLUGIN_DIR})

ビルドしたプラグインのファイルをChoreonoidのプラグインディレクトリにインストールするための設定です。インストール先はこのようにCHOREONOID_PLUGIN_DIR変数で指定することができます。

なお、CMakeでは、同一のプロジェクトで定義されているライブラリをtarget_link_librariesで指定すると、そのライブラリが依存している全てのライブラリへのリンクも行われるようになります。例えば、CnoidBaseはQtのライブラリにも依存しているため、上記の記述でHelloWorldプラグインにもQtのライブラリがリンクされるようになります。このように、本手法ではリンクすべきライブラリについてあまり細かい部分まで気にせずに完結に記述することができます。