cmake1
cmakeのチュートリアル
- CMakeはautomakeのようにmakeファイルを自動で作成してくれるツール
- 複数のプログラムコードが複雑な木構造のディレクトリに置かれてる場合を想定してる
- LinuxでもWindows環境でも使える(Win版はGUIになっててCMakeLists.txtも自動で作成)
各ディレクトリに設定を書いたCMakeLists.txtを置き、
そのプロジェクトのルートとなるディレクトリで cmake . とコマンドする
とmakefileとCMakeFilesが作成される
makeの種類を指定するときは
cmake -G <MSYS> .
本家資料
http://www.cmake.org/HTML/Documentation.html
wiki
http://www.cmake.org/Wiki/CMake
ルートディレクトリだけの設定
このチュートリアルでは木構造の構成のプロジェクトの場合、出発点となるディレクトリをルートと呼んでいる
プロジェクト名の指定
まずルートとなるディレクトリに置くCMakeLists.txtにproject(プロジェクト名)
という設定をする
このルートディレクトリは
PROJECT_SOURCE_DIR
または
PROJECT_BINARY_DIR
マクロで指定される
ディレクトリごとの設定
サブディレクトリを指定する
ディレクトリ内にさらにCMakeFilesのあるサブディレクトリがあればSUBDIRSで指定する
例えばhogeディレクトリ内にsrc1とsrc2のディレクトリがあり
そこにもCMakeFiles.txtを設定するなら
hoge内のCMakeFiles.txtに
SUBDIRS(src1 src2)
と書く
実行ファイルの作成
実行ファイルを作成するにはadd_executableを使うadd_executable (実行ファイル名 リンクさせるファイル)
例えば
g++ -o hoge main.cc
と同じことをcmakeでさせるには
add_executable(hoge main.cc)
となる
例
komicaという実行ファイルをmain.ccとkomica.ccから作るにはadd_executable (komica main.cc subdir/komica.cc)
とする
マクロ変数
設定
set (SUB sublib)使い方
${}で囲むinclude_directories ("${PROJECT_SOURCE_DIR}/${SUB}")
今までのマクロに追加するには
set (SUB ${SUB} sublib2)
例
ルートがあり、その中にmain.ccとsubdirフォルダがあり、そこにkomica.ccとkomica.hがある場合
project(komica)
include_directories ("${PROJECT_BINARY_DIR}/subdir")
add_executable (komica main.cc subdir/komica.cc)
ヘッダーファイルの検索パス指定 (includeディレクトリ)
そのプログラムがincludeさせたいヘッダーファイルを検索する場所(パス)を指定するにはinclude_directories(dir1 dir2)
とする
例えばルートにincludeするヘッダーファイルを置くなら
include_directories ("${PROJECT_SOURCE_DIR}")
とする
ライブラリ
作成
スタティックライブラリを作るなら
add_library(ライブラリ名 STATIC CPPファイル名)
共有ライブラリ(so)にするならSTATICをSHAREDとする
例
add_library(komi STATIC ${sub}/komica.cc)
ルートに書けばルートにlibkomi.aができる
ライブラリをリンクするには
target_link_libraries(実行ファイル名 ライブラリ名)例
add_executable (komica main.cc)
target_link_libraries(komica komi)
ライブラリの検索パスを指定
LINK_DIRECTORIES(dir1 dir2)
コンパイラオプションの指定
ADD_DEFINITIONS()
別のファイルを読み込む
INCLUDE(file)
CMakeサンプル
例1
sublib上にkomica.ccとkomica.hがありルート上にlibkomi.aを作りリンクさせる場合project (komica)
set (sub ${sub} sublib)
include_directories ("${PROJECT_SOURCE_DIR}/${sub}")
add_subdirectory(sublib)
add_library(komi STATIC ${sub}/komica.cc)
add_executable (komica main.cc)
target_link_libraries(komica komi)
例2
sublib上にkomica.ccとkomica.hがありsublib上にlibkomi2.aを作りリンクさせる場合ルート上のCMakeLists.txt
project (komica)
set (sub ${sub} sublib)
include_directories ("${PROJECT_SOURCE_DIR}/${sub}")
add_subdirectory(sublib)
add_executable (komica main.cc)
target_link_libraries(komica komi2)
sublib上のCMakeLists.txt
add_library(komi2 STATIC komica.cc)
2008年11月08日(土) 15:00:47 Modified by eruvasu