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)

複数のディレクトリを一括コンパイル

- 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.cmakeにある.