CMakeLists Tutorial
ここでは、基本的な設定スクリプト(CMakeLists.txt
)の書き方を紹介します。
(主にVisual C++向けに説明します。)
Basic Uses
CMakeでC++のプロジェクトを生成するための最小限必要のスクリプトを説明します。
-
cmake_minimum_required
CMakeの最小要求バージョンを設定します。cmake_minimum_required( VERSION 2.8 )
-
project
Visual C++のソリューションファイルの名前を設定します。project( solution )
-
add_executable
Visual C++のプロジェクトファイルの名前と含まれるソースコードのパスを設定します。
複数のヘッダファイルやソースコードを指定するには、スペースで区切り列挙します。
また、別のディレクトリにあるファイルはCMakeLists.txt
からの相対パスで指定することができます。add_executable( project header.h source.cpp )
ここまでで、基本的なプロジェクトを生成するための最小限のスクリプト(CMakeLists.txt
)を書くことができます。
標準ライブラリのみ用いるようなプログラムの場合はこれだけで大丈夫です。
cmake_minimum_required( VERSION 2.8 )
# Splution(*.sln) and Project(*.vcxproj)
project( solution )
add_executable( project header.h source.cpp )
# Set StartUp Project (Option)
set_property( DIRECTORY PROPERTY VS_STARTUP_PROJECT "project" )
Additional Libraries
CMakeでライブラリを利用するC++のプロジェクトを生成するためのスクリプトを説明します。
-
CMAKE_MODULE_PATH
CMakeがライブラリを検索して設定を取得するためのモジュール(Find○○○.cmake
)のパスを設定します。
CMakeがデフォルトで用意しているモジュールは、C:\Program Files (x86)\CMake\share\cmake-3.5\Modules
に含まれています。ここでは、設定スクリプト(CMakeLists.txt
)と同じパス(CMAKE_CURRENT_SOURCE_DIR
)を検索先として追加しています。set( CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" ${CMAKE_MODULE_PATH} )
-
find_package
CMakeがモジュール(Find○○○.cmake
)からライブラリを検索して設定を取得します。
(モジュールが用意されていないライブラリは検索できないため、Find○○○.cmake
を書く必要があります。)
モジュールが対応している場合は、<VERSION>
に検索するライブラリのバージョン番号を指定することができます。find_package( <LIBRARY> <VERSION> REQUIRED )
モジュールにより様々ですが、基本的に以下のようなマクロを取得することができます。
- <LIBRARY>_FOUND
ライブラリの検索状態。(TRUE or FALSE) - <LIBRARY>_INCLUDE_DIRS
インクルードファイルが含まれるディレクトリのパス。(e.g. C:\Program Files\LIBRARY\inc) - <LIBRARY>_LIBRARY_DIRS
ライブラリファイルが含まれるディレクトリのパス。(e.g. C:\Program Files\LIBRARY\lib) - <LIBRARY>_LIBRARIES
ライブラリファイルのパス。(e.g. C:\Program Files\LIBRARY\lib\LIBRARY.lib) - <LIBRARY>_DEFINITIONS
プリプロセッサの定義。(e.g. LIBRARY_DEFINE)
- <LIBRARY>_FOUND
-
include_directories
Visual C++のプロジェクトに「追加のインクルードディレクトリ([C/C++]>[全般]>[追加のインクルードディレクトリ])」を設定をします。include_directories( ${<LIBRARY>_INCLUDE_DIRS} )
-
add_definitions
Visual C++のプロジェクトに「プリプロセッサの定義([C/C++]>[プリプロセッサ]>[プリプロセッサの定義])」を設定します。add_definitions( ${<LIBRARY>_DEFINITIONS} )
-
link_directories
Visual C++のプロジェクトに「追加のライブラリディレクトリ([リンカ]>[全般]>[追加のライブラリディレクトリ])」を設定をします。link_directories( ${<LIBRARY>_LIBRARY_DIRS} )
-
target_link_libraries
Visual C++のプロジェクトに「追加の依存ファイル([リンカ]>[入力]>[追加の依存ファイル])」を設定をします。target_link_libraries( project ${<LIBRARY>_LIBRARIES} )
他にもありますが、ライブラリを利用するプロジェクトを生成するためのスクリプト(CMakeLists.txt
)の基本は以下のようになります。
ライブラリによっては必要なものや不要なものがあるので、適宜モジュールを参照してください。
cmake_minimum_required( VERSION 2.8 )
set( CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" ${CMAKE_MODULE_PATH} )
# Splution(*.sln) and Project(*.vcxproj)
project( solution )
add_executable( project header.h source.cpp )
# Set StartUp Project (Option)
set_property( DIRECTORY PROPERTY VS_STARTUP_PROJECT "project" )
# Aditional Library Settings
find_package( <LIBRARY> <VERSION> REQUIRED )
if( <LIBRARY>_FOUND )
include_directories( ${<LIBRARY>_INCLUDE_DIRS} )
add_definitions( ${<LIBRARY>_DEFINITIONS} )
link_directories( ${<LIBRARY>_LIBRARY_DIRS} )
target_link_libraries( project ${<LIBRARY>_LIBRARIES} )
endif()
Generate Project
CMake GUIを使ってソースコードと設定スクリプト(CMakeLists.txt
)からプロジェクトを生成します。
(メニューから[File]>[Delete Cache]ボタンを押すことでキャッシュを削除することができます。)
-
Launch CMake-GUI
CMake-GUIを起動します。 -
Specify Source Code Directory and Output Directory
-
Where is the source code:
Where is the source code:
はソースコードのディレクトリです。
設定スクリプト(CMakeLists.txt
)の配置されているディレクトリを指定します。
(e.g.C:/project
) -
Where to build the binaries:
Where to build the binaries:
はVisual C++のプロジェクト(*.sln
,*.vcxproj
など)を出力するディレクトリです。
任意のディレクトリを指定できますが、out-of-source buildの方針に従うことを推奨します。
慣例として<source directory>/build
とすることが多いです。
(e.g.C:/project/build
)
-
Specify Compiler
Configure
ボタンを押すと、コンパイラを選択するウィンドウが表示されます。
ドロップダウンメニューから使用するVisual Studioを選択します。
x86向けにビルドするには「Visual Studio ** ****
」を選択します。
x64向けにビルドするには「Visual Studio ** **** Win64
」を選択します。
Finish
ボタンを押すと、開発環境に合わせた設定が行われます。 -
Configuration Settings
ライブラリのパスなど多くの項目は開発環境に合わせて自動的に設定されます。
オプションの変更などをしたときは再度Configure
ボタンを押して変更を反映させます。 -
Generate Project
設定が終了したらGenerate
ボタンを押します。
指定したディレクトリにVisual C++のプロジェクトが生成されます。