cmake チュートリアル
cmakeを使い始める
サーチ…
備考
CMakeは、主にC ++用のコードビルドの定義と管理のためのツールです。
CMakeはクロスプラットフォームのツールです。プロジェクトがどのようにビルドされているかという単一の定義を持つことで、サポートされているプラットフォームの特定のビルド定義に変換されます。
異なるプラットフォーム固有のビルドシステムと組み合わせることでこれを実現します。 CMakeは、特定のプラットフォームごとにビルド入力を生成する中間段階です。 Linuxでは、CMakeはMakefileを生成します。 Windowsでは、Visual Studioプロジェクトを生成することができます。
ビルドの動作は、ソースコードのすべてのディレクトリにあるCMakeLists.txt
ファイルで定義されます。各ディレクトリのCMakeLists
ファイルはCMakeLists
システムがその特定のディレクトリで何をすべきかを定義します。また、CMakeがどのサブディレクトリも同様に扱うべきであることを定義します。
典型的なアクションは次のとおりです。
- このディレクトリの一部のソースファイルからライブラリまたは実行可能ファイルをビルドします。
- ビルド中に使用されるインクルードパスにファイルパスを追加します。
- ビルドシステムがこのディレクトリとそのサブディレクトリで使用する変数を定義します。
- 特定のビルド構成に基づいてファイルを生成します。
- ソースツリーのどこかにあるライブラリを探します。
最終的なCMakeLists
ファイルは、その範囲が非常に限定されているので、非常に明快で簡単です。それぞれは、現在のディレクトリに存在するものだけを処理します。
CMakeの公式リソースについては、CMakeのドキュメンテーションとチュートリアルを参照してください。
バージョン
バージョン | 発売日 |
---|---|
3.9 | 2017-07-18 |
3.8 | 2017-04-10 |
3.7 | 2016-11-11 |
3.6 | 2016-07-07 |
3.5 | 2016-03-08 |
3.4 | 2015-11-12 |
3.3 | 2015-07-23 |
3.2 | 2015-03-10 |
3.1 | 2014年12月17日 |
3.0 | 2014年6月10-10日 |
2.8.12.1 | 2013-11-08 |
2.8.12 | 2013年10月11日 |
2.8.11 | 2013-05-16 |
2.8.10.2 | 2012-11-27 |
2.8.10.1 | 2012-11-07 |
2.8.10 | 2012-10-31 |
2.8.9 | 2012-08-09 |
2.8.8 | 2012-04-18 |
2.8.7 | 2011-12-30 |
2.8.6 | 2011-12-30 |
2.8.5 | 2011年7月8日 |
2.8.4 | 2011-02-16 |
2.8.3 | 2010-11-03 |
2.8.2 | 2010-06-28 |
2.8.1 | 2010-03-17 |
2.8 | 2009-11-13 |
2.6 | 2008-05-05 |
CMakeのインストール
CMakeのダウンロードページに行き、Windows、Linux、Mac OS Xなどのオペレーティングシステム用のバイナリを入手します。Windowsではバイナリをダブルクリックしてインストールします。 Linuxでは、ターミナルからバイナリを実行します。
Linuxでは、ディストリビューションのパッケージマネージャーからパッケージをインストールすることもできます。 Ubuntu 16.04では、次のコマンドラインとグラフィカルアプリケーションをインストールできます。
sudo apt-get install cmake
sudo apt-get install cmake-gui
FreeBSDでは、次のコマンドラインとQtベースのグラフィカルアプリケーションをインストールすることができます:
pkg install cmake
pkg install cmake-gui
Mac OSXでは、あなたのソフトウェアをインストールするために利用可能なパッケージマネージャの1つ、最も注目すべきはMacPorts( MacPorts )とHomebrew( Homebrew )を使用すれば、それらのいずれかを使ってCMakeをインストールすることもできます。たとえば、MacPortsの場合、次のように入力します
sudo port install cmake
CMakeをインストールしますが、Homebrewパッケージマネージャーを使用する場合は、
brew install cmake
CMakeをインストールしたら、次のようにして簡単にチェックすることができます
cmake --version
次のようなものが表示されます
cmake version 3.5.1
CMake suite maintained and supported by Kitware (kitware.com/cmake).
デバッグとリリースなどのビルドタイプの切り替え
CMakeはいくつかのビルドタイプを知っています。これらのビルドタイプは、デフォルトのコンパイラやリンカのパラメータ(デバッグ情報の作成など)や代替コードパスに影響します。
デフォルトでは、CMakeは以下のビルドタイプを扱うことができます:
- デバッグ :通常、古典的なデバッグビルド。デバッグ情報、最適化などは含まれません。
- リリース :一般的なリリースビルドで、デバッグ情報と完全な最適化が不要です。
- RelWithDebInfo:: Releaseと同じですが、デバッグ情報があります。
- MinSizeRel :サイズに合わせて最適化された特別なリリースビルド。
設定の処理方法は、使用されているジェネレータによって異なります。
いくつかのジェネレータ(Visual Studioなど)は複数の設定をサポートしています。 CMakeは一度にすべての設定を生成し、IDEから選択するか、-- --config CONFIG
( cmake --build
を使用)を使用して構築したい設定を選択することができます。これらのジェネレータのために、CMakeはビルドディレクトリ構造を生成するために最善を尽くして、異なるコンフィギュレーションからのファイルがお互いに進まないようにします。
単一の構成(Unix Makefileなど)のみをサポートするジェネレータは、動作が異なります。ここで現在アクティブな構成は、CMake変数CMAKE_BUILD_TYPE
値によって決定されます。
たとえば、異なるビルドタイプを選択するには、次のコマンドラインコマンドを発行します。
cmake -DCMAKE_BUILD_TYPE=Debug path/to/source
cmake -DCMAKE_BUILD_TYPE=Release path/to/source
CMakeスクリプトはCMAKE_BUILD_TYPE
自体の設定を避けるべきです。 CMAKE_BUILD_TYPE
、一般的にユーザーの責任とみなされているからです。
単一構成の発電機の場合、構成を切り替えるにはCMakeを再実行する必要があります。その後のビルドでは、以前の設定で生成されたオブジェクトファイルを上書きする可能性があります。
シンプルな "Hello World"プロジェクト
main()
関数を定義するC ++ソースファイルmain.cpp
CMakeLists.txt
、付随するCMakeLists.txt
ファイル(以下の内容)は、 CMakeに現在のシステムとデフォルトのC ++コンパイラの適切なビルド命令を生成するよう指示します。
main.cpp ( C ++ Hello Worldの例 )
#include <iostream>
int main()
{
std::cout << "Hello World!\n";
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 2.4)
project(hello_world)
add_executable(app main.cpp)
cmake_minimum_required(VERSION 2.4)
は、現在のスクリプトを評価するのに必要なCMakeの最小バージョンを設定します。project(hello_world)
は新しいCMakeプロジェクトを開始します。これは、多くの内部CMakeロジック、特にデフォルトのCおよびC ++コンパイラの検出を引き起こします。add_executable(app main.cpp)
を使用すると、ビルドターゲットapp
が作成されます。これにより、現在の設定用のいくつかのデフォルトフラグが設定されたコンパイラが呼び出され、指定されたソースファイルmain.cpp
から実行可能app
がコンパイルされます。
コマンドライン (インソースビルド、推奨しない)
> cmake .
...
> cmake --build .
cmake .
コンパイラの検出は、与えられたCMakeLists.txt
を評価し.
現在の作業ディレクトリにビルド環境を生成します。
cmake --build .
コマンドは、必要なbuild / makeコールの抽象です。
コマンドライン (Out-of-Source、推奨)
ビルド成果物からソースコードをきれいに保つには、「ソース外」ビルドを行う必要があります。
> mkdir build
> cd build
> cmake ..
> cmake --build .
また、CMakeは上の例からあなたのプラットフォームシェルの基本コマンドを抽象化することもできます:
> cmake -E make_directory build
> cmake -E chdir build cmake ..
> cmake --build build
複数のソースファイルを持つ "Hello World"
まず、 include_directories()
でヘッダファイルのディレクトリを指定してから、 add_executable()
でターゲットの実行可能ファイルの対応するソースファイルを指定し、ソースファイルに正確に1つのmain()
関数があることを確認する必要があります。
以下は簡単な例です。すべてのファイルは、 PROJECT_SOURCE_DIR
というディレクトリに置かれているものとみなされます。
main.cpp
#include "foo.h"
int main()
{
foo();
return 0;
}
foo.h
void foo();
foo.cpp
#include <iostream>
#include "foo.h"
void foo()
{
std::cout << "Hello World!\n";
}
CMakeLists.txt
cmake_minimum_required(VERSION 2.4)
project(hello_world)
include_directories(${PROJECT_SOURCE_DIR})
add_executable(app main.cpp foo.cpp) # be sure there's exactly one main() function in the source files
上記の例と同じ手順でプロジェクトを構築することができます。 app
を実行すると印刷されます
>./app
Hello World!
図書館としての "Hello World"
この例は、 "Hello World"プログラムをライブラリとしてデプロイする方法と、それを他のターゲットとリンクする方法を示しています。
http://www.riptutorial.com/cmake/example/22391/-hello-world--with-multiple-source-filesの例と同じソース/ヘッダーファイルがあるとします 。複数のソースファイルから構築するのではなく、まずadd_library()
を使用してライブラリとしてfoo.cpp
をデプロイした後、 target_link_libraries()
をtarget_link_libraries()
してメインプログラムとtarget_link_libraries()
ます。
CMakeLists.txtを次のように変更します
cmake_minimum_required(VERSION 2.4)
project(hello_world)
include_directories(${PROJECT_SOURCE_DIR})
add_library(applib foo.cpp)
add_executable(app main.cpp)
target_link_libraries(app applib)
同じ手順で同じ結果が得られます。