連絡先 最初に戻る 戻る 次へ進む
$Date: 2017-05-14 17:13:45 +0900 (2017/05/14 (日)) $
$Revision: 1130 $

HelloWorld for cmake

CMakeLists.txt とソースファイルの作成

以下のようなプログラムがあるときにこれを cmake でプロジェクトを作成してコンパイルすることを考えます。
#include <stdio.h>

int main()
{
	printf("Hello World\n");
	return 0;
}
以下のような CMakeLists.txt を作成します。
cmake_minimum_required(VERSION 2.6.4)

# define a variable of project name
set( project_name "HelloWorld")

# set the project as the startup project
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT ${project_name} )

# define a project name
project (${project_name})

# define a variable SRC with file GLOB
file(GLOB SRC *.c)

# define sources files of an executable
add_executable(${project_name} ${SRC})
上記のファイルは https://github.com/m-tmatma/cmake-sample.git で公開しています。
HelloWorld というフォルダに入っています。 以下コマンドで取得します。
git clone https://github.com/m-tmatma/cmake-sample.git

cmake --help

以下は cmake --help の Windows での実行結果です。
-G でどのツールのプロジェクトを生成するかを選択できます。
OS によって選択できる -G のオプションは変わります。使用したい OS 上で cmake --help を実行してみてください。
たとえば Visual Studio 2015 で Win32 用のプロジェクトを生成する場合は -G "Visual Studio 14 2015" を指定します。
たとえば Visual Studio 2017 で x64 用のプロジェクトを生成する場合は -G "Visual Studio 15 2017 Win64" を指定します。
> cmake --help
Usage

  cmake [options] <path-to-source>
  cmake [options] <path-to-existing-build>

Specify a source directory to (re-)generate a build system for it in the
current working directory.  Specify an existing build directory to
re-generate its build system.

Options
  -C <initial-cache>           = Pre-load a script to populate the cache.
  -D <var>[:<type>]=<value>    = Create a cmake cache entry.
  -U <globbing_expr>           = Remove matching entries from CMake cache.
  -G <generator-name>          = Specify a build system generator.
  -T <toolset-name>            = Specify toolset name if supported by
                                 generator.
  -A <platform-name>           = Specify platform name if supported by
                                 generator.
  -Wdev                        = Enable developer warnings.
  -Wno-dev                     = Suppress developer warnings.
  -Werror=dev                  = Make developer warnings errors.
  -Wno-error=dev               = Make developer warnings not errors.
  -Wdeprecated                 = Enable deprecation warnings.
  -Wno-deprecated              = Suppress deprecation warnings.
  -Werror=deprecated           = Make deprecated macro and function warnings
                                 errors.
  -Wno-error=deprecated        = Make deprecated macro and function warnings
                                 not errors.
  -E                           = CMake command mode.
  -L[A][H]                     = List non-advanced cached variables.
  --build <dir>                = Build a CMake-generated project binary tree.
  -N                           = View mode only.
  -P <file>                    = Process script mode.
  --find-package               = Run in pkg-config like mode.
  --graphviz=[file]            = Generate graphviz of dependencies, see
                                 CMakeGraphVizOptions.cmake for more.
  --system-information [file]  = Dump information about this system.
  --debug-trycompile           = Do not delete the try_compile build tree.
                                 Only useful on one try_compile at a time.
  --debug-output               = Put cmake in a debug mode.
  --trace                      = Put cmake in trace mode.
  --trace-expand               = Put cmake in trace mode with variable
                                 expansion.
  --trace-source=<file>        = Trace only this CMake file/module.  Multiple
                                 options allowed.
  --warn-uninitialized         = Warn about uninitialized values.
  --warn-unused-vars           = Warn about unused variables.
  --no-warn-unused-cli         = Don't warn about command line options.
  --check-system-vars          = Find problems with variable usage in system
                                 files.
  --help,-help,-usage,-h,-H,/? = Print usage information and exit.
  --version,-version,/V [<f>]  = Print version number and exit.
  --help-full [<f>]            = Print all help manuals and exit.
  --help-manual <man> [<f>]    = Print one help manual and exit.
  --help-manual-list [<f>]     = List help manuals available and exit.
  --help-command <cmd> [<f>]   = Print help for one command and exit.
  --help-command-list [<f>]    = List commands with help available and exit.
  --help-commands [<f>]        = Print cmake-commands manual and exit.
  --help-module <mod> [<f>]    = Print help for one module and exit.
  --help-module-list [<f>]     = List modules with help available and exit.
  --help-modules [<f>]         = Print cmake-modules manual and exit.
  --help-policy <cmp> [<f>]    = Print help for one policy and exit.
  --help-policy-list [<f>]     = List policies with help available and exit.
  --help-policies [<f>]        = Print cmake-policies manual and exit.
  --help-property <prop> [<f>] = Print help for one property and exit.
  --help-property-list [<f>]   = List properties with help available and
                                 exit.
  --help-properties [<f>]      = Print cmake-properties manual and exit.
  --help-variable var [<f>]    = Print help for one variable and exit.
  --help-variable-list [<f>]   = List variables with help available and exit.
  --help-variables [<f>]       = Print cmake-variables manual and exit.

Generators

The following generators are available on this platform:
  Visual Studio 15 2017 [arch] = Generates Visual Studio 2017 project files.
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files.
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project files.
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project files.
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 10 2010 [arch] = Generates Visual Studio 2010 project files.
                                 Optional [arch] can be "Win64" or "IA64".
  Visual Studio 9 2008 [arch]  = Generates Visual Studio 2008 project files.
                                 Optional [arch] can be "Win64" or "IA64".
  Visual Studio 8 2005 [arch]  = Generates Visual Studio 2005 project files.
                                 Optional [arch] can be "Win64".
  Visual Studio 7 .NET 2003    = Deprecated.  Generates Visual Studio .NET
                                 2003 project files.
  Borland Makefiles            = Generates Borland makefiles.
  NMake Makefiles              = Generates NMake makefiles.
  NMake Makefiles JOM          = Generates JOM makefiles.
  Green Hills MULTI            = Generates Green Hills MULTI files
                                 (experimental, work-in-progress).
  MSYS Makefiles               = Generates MSYS makefiles.
  MinGW Makefiles              = Generates a make file for use with
                                 mingw32-make.
  Unix Makefiles               = Generates standard UNIX makefiles.
  Ninja                        = Generates build.ninja files.
  Watcom WMake                 = Generates Watcom WMake makefiles.
  CodeBlocks - MinGW Makefiles = Generates CodeBlocks project files.
  CodeBlocks - NMake Makefiles = Generates CodeBlocks project files.
  CodeBlocks - NMake Makefiles JOM
                               = Generates CodeBlocks project files.
  CodeBlocks - Ninja           = Generates CodeBlocks project files.
  CodeBlocks - Unix Makefiles  = Generates CodeBlocks project files.
  CodeLite - MinGW Makefiles   = Generates CodeLite project files.
  CodeLite - NMake Makefiles   = Generates CodeLite project files.
  CodeLite - Ninja             = Generates CodeLite project files.
  CodeLite - Unix Makefiles    = Generates CodeLite project files.
  Sublime Text 2 - MinGW Makefiles
                               = Generates Sublime Text 2 project files.
  Sublime Text 2 - NMake Makefiles
                               = Generates Sublime Text 2 project files.
  Sublime Text 2 - Ninja       = Generates Sublime Text 2 project files.
  Sublime Text 2 - Unix Makefiles
                               = Generates Sublime Text 2 project files.
  Kate - MinGW Makefiles       = Generates Kate project files.
  Kate - NMake Makefiles       = Generates Kate project files.
  Kate - Ninja                 = Generates Kate project files.
  Kate - Unix Makefiles        = Generates Kate project files.
  Eclipse CDT4 - NMake Makefiles
                               = Generates Eclipse CDT 4.0 project files.
  Eclipse CDT4 - MinGW Makefiles
                               = Generates Eclipse CDT 4.0 project files.
  Eclipse CDT4 - Ninja         = Generates Eclipse CDT 4.0 project files.
  Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files.

プロジェクト作成 for Visual Studio

Visual Studio 2017 用に Win32 用のプロジェクトを生成する場合の例です。
cmake ではソースコードのディレクトリとビルド用のディレクトリを分けます。
このためまず最初にビルド用のディレクトリを作成して、そのディレクトリに移動します。
-G オプションでどの種類のプロジェクトを生成するかを指定します。
最後にソースコードの入っているディレクトリ(実際には CMakeLists.txt の入っているディレクトリ) を指定して cmake を実行します。
> mkdir HelloWorld
> cd    HelloWorld
> cmake -G "Visual Studio 15 2017"  ..\cmake-sample\HelloWorld\
cmake を実行するとカレントディレクトリにソリューションファイルが作成されるので Visual Studio で開いてコンパイルします。

プロジェクト作成 for Xcode

Xcode でプロジェクト作成する場合は -G オプションに Xcode を指定するところが違うだけです。
$ mkdir HelloWorld
$ cd    HelloWorld
$ cmake -G "Xcode"  ../cmake-sample/HelloWorld/
あと違うのは スタートアッププロジェクトの指定が Xcode だと効かないので、Xcode から開始するときにプロジェクトを選択する必要があります。

プロジェクト作成 for Makefile on Linux (Mac とかでも適用可能)

Linux で Makefile を使う場合
$ mkdir HelloWorld
$ cd    HelloWorld
$ cmake -G "Unix Makefiles" ../cmake-sample/HelloWorld/
Makefile でビルドする場合、以下のようにデフォルトではコマンドが表示されません。
$ make
Scanning dependencies of target HellowWorld
[ 50%] Building C object CMakeFiles/HellowWorld.dir/HelloWorld.c.o
[100%] Linking C executable HellowWorld
[100%] Built target HellowWorld
変数 VERVOSE で 1 を指定してビルドすることでどのようなコマンドが実行されているか確認できます。
make VERBOSE=1

プロジェクト作成 for Ninja on Linux (Windows とかでも適用可能)

Ninja というビルドシステムもあります。
Unix Makefile よりも高速です。
$ mkdir HelloWorld-ninja
$ cd    HelloWorld-ninja
$ make -G Ninja ../cmake-sample/HelloWorld
Ninja でビルドする場合も、以下のようにデフォルトではコマンドが表示されません。
$ ninja-build
[2/2] Linking C executable HellowWorld
-v を指定してビルドすることでどのようなコマンドが実行されているか確認できます。
ninja-build -v