可変ブログ

色々メモとか。とりあえず自分が分かるように。その後、なるべく人が見て分かるように。可変。

cmakeとかg++とか

g++で外部のライブラリを使うときとかに指定しなきゃいけないもの。
・ソース(.c .cpp)
・ヘッダ(.h .hpp)の入っているディレクトリ(-Iで指定)
・ライブラリの入っているディレクトリ(-Lで指定)
・ライブラリ(.a .o等)(-lで指定)


・ヘッダファイル自体はソースコードの中で指定するものだからコンパイラオプションでは指定しない。
・また、#include "hoge.h" のように""で囲まれている場合は、最初にカレントディレクトリを探してくれるので、
この時対象のヘッダがカレントディレクトリある場合は「-I」指定はいらない。
・LD_LIBRARY_PATHにパスが通っているライブラリなら「-L」の指定はいらない。
・ちなみに実行時には.so等のダイナミックリンクライブラリがPATHに追加されている必要がある場合がある。
・pkg-configは、登録されているライブラリなら自動でこの「-I」「-L」「-l」指定をやってくれる。
`pkg-config --cflags hoge` `pkg-config --libs hoge`




cmakeのバージョン指定。

cmake_minimumrequired(VERSION 2.8.3)


add_definitionsでg++のオプションを追加できる。

add_definitions("-std=c++11")


CMAKE_BUILD_TYPEにsetでビルドタイプを指定できる。

set(CMAKE_BUILD_TYPE Release)


cmakeでpkg-configを使いたい時はfind_pkgで。

find_pkg(PkgConfig)
pkg_config_modules(OPENCV REQUIRED opencv)

これで、ヘッダディレクトリはOPENCV_INCLUDE_DIRSの変数に、
ライブラリディレクトリはOPENCV_LIBRARY_DIRSの変数に、
ライブラリはOPENCV_LIBRARIESの変数に入る。

インクルードディレクトリの指定。

include_directories(/hoge/fuga)


ライブラリのディレクトリの指定。

link_directories(/hoge/piyo)


コンパイルするソースの指定。

add_executable(hoge hoge.cpp)


リンクするライブラリの指定。

target_link_libraries(hoge fugelib)