忍者ブログ
ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
[514]  [513]  [512]  [511]  [510]  [509]  [508]  [507]  [506]  [505]  [504
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

CMakeでFine~.cmakeファイルや~Config.cmakeファイルを作るのが難しいのかと思っていましたが、そんな事なかったみたいです。
単純にインクルードパス、ライブラリパス、ライブラリ名を変数に設定しているだけでした。
何を勘違いしていたのでしょうね?

例えば、OpenRTM-aistでは、



インクルードパス:OPENRTM_INCLUDE_DIRS
ライブラリパス:OPENRTM_LIBRARY_DIRS
ライブラリ名:OPENRTM_LIBRARIES
プリプロセッサシンボル:OPENRTM_CFLAGS


という変数を設定していて、

include_directories(${OPENRTM_INCLUDE_DIRS})
link_directories(${OPENRTM_LIBRARY_DIRS})
target_link_libraries(プロジェクト名 ${OPENRTM_LIBRARIES})
add_definitions(${OPENRTM_CFLAGS})

のようにCMakeファイルに記述すれば使うことができるというわけですね。



とは言っても環境変数等を設定していないと使えないライブラリもあるので、具体的に色々なライブラリを使いながら試してみます。

以前作成した実行順序設定可能な実行コンテキストのビルドを自動化するためのCMakeファイルを作成したので、これを例にして説明してみます。


まず、この例ではOpenRTM-aist、Lua5.1、Qt5、Boost、Luabindを使用しています。
パッケージの検索は以下のようにして行います。

find_package(Qt5Widgets REQUIRED)
find_package(OpenRTM REQUIRED)
find_package(Boost REQUIRED)
find_package(Lua51 REQUIRED)



Luabindは調べた限りはですがCMakeに対応していないみたいなので、

set(LUABIND_PATH "luabind-0.9.1")

include_directories(${LUABIND_PATH})
set(luabind_srcs ~)

ADD_LIBRARY(プロジェクト名 SHARED  ${srcs} ${luabind_srcs})

自分でパスを設定して、こちらでソースコードからビルドするようにしています。
なのでluabind-0.9.1をダウンロードしてきてCMakeLists.txtと同じフォルダにコピーしてください。


Boost、Luaに関してはCMakeをインストールしたフォルダのshare/cmake-3.2/ModulesにFindBoost.cmakeとFindLua51.cmakeがあるのでこれを使えます。

ここでBoostはBOOST_ROOT、LuaはLUA_DEVという環境変数にインストールしたディレクトリへのパスを設定しておく必要があります。
Luaはインストーラーでインストールした場合は自動的に設定されます。


OpenRTM-aist、Qtは環境変数PATHから検索します。
具体的には、
  • C:\Program Files (x86)\OpenRTM-aist\1.1\bin、C:\Qt\Qt5.4.1\5.4\msvc2013\binにパスを通す
  • binという名前のディレクトリの親ディレクトリからcmake、libフォルダを検索
  • OpenRTM-aistはcmakeフォルダにOpenRTMConfig.cmakeがあるのでこれを使う
  • Qtの場合はさらにlibフォルダ内のcmakeフォルダを検索
  • cmakeフォルダ内のパッケージ名(Qt5Widgets)という名前のフォルダを検索
  • Qt5WidgetsフォルダにQt5WidgetsConfig.cmakeがあるのでこれを使う
という手順で検索できるのでパスを通しておいてください。多分インストールしたときに自動的に設定されるとは思います。


ここで問題なのはOpenRTM-aistはRTM_ROOT、OpenRTM-aistで使用しているOmniORBではOMNI_ROOTという環境変数を設定しておく必要があると言うことです。



後は以下のようにCMakeファイルに記述してください。
include_directories(${OPENRTM_INCLUDE_DIRS})
include_directories(${OMNIORB_INCLUDE_DIRS})
include_directories(${Boost_INCLUDE_DIRS})
include_directories(${LUA_INCLUDE_DIR})

add_definitions(${OPENRTM_CFLAGS})
add_definitions(${OMNIORB_CFLAGS})

link_directories(${OPENRTM_LIBRARY_DIRS})
link_directories(${OMNIORB_LIBRARY_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
target_link_libraries(プロジェクト名 ${OPENRTM_LIBRARIES} ${LUA_LIBRARIES} ${Boost_LIBRARIES})


Qtだけは使い方が大きく異なります。
まずQtではシグナルやスロットを動作させるために、mocによるコンパイルを行いmocファイルを生成する必要があるわけですがそのために、

set(CMAKE_AUTOMOC ON)

・・・・

qt5_wrap_cpp(moc_ファイル名.cpp ファイル名.h)

と記述しておく必要があります。


あとリソースファイルの設定は、

qt5_add_resources(QRC ファイル名.qrc)

add_library(プロジェクト名 SHARED ${srcs} ${QRC})



のようにqt5_add_resourcesでリソースファイル追加後、コンパイルするファイルを追加すれば使用できるようになります。



そして最後に、


QT5_USE_MODULES(プロジェクト名 Widgets)


と記述すればインクルードパス、ライブラリパスが設定されるみたいです。




確かにCMakeは使いこなせば便利なツールだと思います。
ただ非常に使いづらいのが問題ですが。








にほんブログ村 科学ブログ ロボットへ
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・

人気ブログランキングへ
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
フリーエリア
最新CM
[08/31 ysuga]
[08/31 Nobu]
[08/31 ysuga]
[12/11 Nobu]
[12/11 Kanamura]
最新TB
プロフィール
HN:
Nobu
年齢:
36
性別:
男性
誕生日:
1988/09/22
職業:
あれ
趣味:
妄想、自堕落
バーコード
ブログ内検索
P R
カウンター
忍者ブログ [PR]