自作ライブラリをCMakeでディレクトリごとインストールする方法
春先は送迎会などで諭吉が吹き飛んでいくのが悲しい限りです. ああ,諭吉よ.どうしてあなたは行ってしまったのですか. それはさておき, githubとかで自作ライブラリを公開するときに CMakeつかってビルドして/usr/local/lib/にインストールする方法を紹介しますね.
まず,今回はSonyの開発した人類の永遠の友であるPS3のコントローラーをlinuxで簡単に使用できるライブラリを作ったので,それをドヤ顔してgithubに公開してやろうかと思ったところ,opencvとかのように
とかやると, /usr/local/inculde/と /usr/local/lib/ にいい感じにインストールされる方法がわからなかったときのメモであぞよ.
というわけで,どうすればいいかお教えしましょう. まず,本日の生け贄... 本日のメインディッシュはdualshockという名前のライブラリとなっております.
構成
本日の構成は
となっております.というか,こんな感じのディレクトリ構成にしてください.多少は意味があります.
CMakeLists.txt
CMakeLists.txtは以下のように記述すること.
cmake_minimum_required(VERSION 3.5)project(dualshock)add_definitions("-std=c++11")set(SRC_DIR src)set(INCLUDE_DIR include/dualshock)include_directories(${INCLUDE_DIR})add_library(dualshock STATIC ${SRC_DIR}/ds3.cpp)target_link_libraries(dualshock pthread)install( TARGETS dualshockRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION lib)install(DIRECTORY include/dualshockDESTINATION /usr/local/include)
ポイント
この場合,ファイル構成は綺麗になるが,ヘッダーと実装ファイルの 関係をどのように定義するのかが問題となる.
コンパイル時と,インストール後に使用するときとでは, それらの関係が異なるのである.
具体的には,cppファイルでどのようにヘッダーをincludeするのかということである.
でも,よく考えると,ヘッダーのincludeはコンパイルの時にのみ必要になる.ということは,インストールするときさえ乗り切れば,あとは,どうとでもなる.ということ.よって,ds3.cppのinclude部分をちょっとかえる.
FROM
ライブラリ内のヘッダーを参照するようにincludeのパスを変更する.
TO
結果
これを実行すると /usr/local/include 以下に /dualshock/ds3.hpp
/usr/local/lib/ 以下に libdualshock.a
がインストールされる.