Cmakeのメモ
使い方
- CMakeList.txtにMakefileの生成ルールを記述.
- CMakeLists.txtを用意したディレクトリを指定してcmakeを実行するとMakefileが生成される.後は通常通りにmakeでコンパイル.
- ただし,cmakeするとCMakeCache.txtやら色々できてディレクトリが汚れるのでソース外ビルドでやるのが良い.やりかたは,buildディレクトリなりを一旦作って,そのディレクトリに移動して"cmake ..“すれば,buildディレクトリにビルドセットアップ一式が生成される.そこでmakeする.相対パスを使っている場合は注意する.
CMakeList.txtの書き方(基本)
# cmakeのバージョン(必須) cmake_minimum_required(VERSION 2.8) # コンパイラ指定 set(CMAKE_CXX_COMPILER /usr/bin/clang++ ) # コンパイルオプション set(CMAKE_CXX_FLAGS "-Wall") # -I : include pathを順に追加 include_directories(/usr/share/path1) include_directories(/usr/share/path2) # -D : 定義を追加 add_definitions(-DDEBUG) # -L : ライブラリ検索パスを追加 link_directories(/usr/share/lib) # 出力する実行可能形式と,それが依存するソースファイル.(ヘッダは自動解析) add_executable(Main main.cpp src1.cpp src2) # -l : リンクライブラリ (add_executableよりも後ろに書く) -lm -lglut を指定する target_link_libraries(Main glut m)
複数のディレクトリを一括コンパイル
- 例えば下記のディレクトリ構成で,hoge, fooを同時に生成したい場合.トップディレクトリのCMakeList.txtでadd_subdirectory を指定しておき,各ディレクトリでもCMakeList.txtを用意しておく.トップでcmakeしてmakeすればサブディレクトリも一括してコンパイルしてくれる.
- root_dir - CMakeList.txt # add_subdirectory(hoge), add_subdirectory(foo)を記述しておく. - hoge - CMakeList.txt # hoge.cppをコンパイルする記述をしておく. - hoge.cpp - foo - CMakeList.txt # foo.cppをコンパイルする記述をしておく. - foo.cpp
cmakeのバージョン
cmake_minimum_required(VERSION 2.8)
find_package(GLUT) find_package(OpenGL)
set(CMAKE_CXX_FLAGS “-g -Wall”) add_executable(Main main_openGL.cpp) target_link_libraries(Main ${GLUT_LIBRARY} ${OPENGL_LIBRARY} m) ||<
特定のアプリ(OpenGL, OpenCV, Qt)などはcmake側で予め用意されている.
用意されているアプリは/usr/share/cmake/Module/Find