Skip to content

Instantly share code, notes, and snippets.

@UnaNancyOwen
Last active December 1, 2023 03:44
Show Gist options
  • Star 25 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save UnaNancyOwen/47159d73b480f16b846a to your computer and use it in GitHub Desktop.
Save UnaNancyOwen/47159d73b480f16b846a to your computer and use it in GitHub Desktop.
How to write CMakeLists

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)
  • 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]ボタンを押すことでキャッシュを削除することができます。)

  1. Launch CMake-GUI
    CMake-GUIを起動します。

  2. 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)

  1. Specify Compiler
     Configureボタンを押すと、コンパイラを選択するウィンドウが表示されます。
    ドロップダウンメニューから使用するVisual Studioを選択します。
    x86向けにビルドするには「Visual Studio ** ****」を選択します。
    x64向けにビルドするには「Visual Studio ** **** Win64」を選択します。
    Finishボタンを押すと、開発環境に合わせた設定が行われます。  

  2. Configuration Settings
    ライブラリのパスなど多くの項目は開発環境に合わせて自動的に設定されます。
    オプションの変更などをしたときは再度Configureボタンを押して変更を反映させます。  

  3. Generate Project
    設定が終了したらGenerateボタンを押します。
    指定したディレクトリにVisual C++のプロジェクトが生成されます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment