スチールウールの活動記録

初心者に向けて(私もだけど)電子工作やプログラミングや関連することをいろいろ。

CMakeの使い方

メモ程度な感じで簡単な使い方を…
私の環境のCMakeのバージョンは3.2.1です。

CMakeとは

Cmakeというのはクロスプラットフォームで使えるビルド自動化のためのフリーソフトウェアです。
同じプログラムをビルドするとき、WindowsでならVisual Studioでビルド、LinuxなどではMakefileを書いてMakeします。しかし、色んなOSでビルドする場合、Visual Studioの設定をして、Makefileも書かなければなりません。しかも他の人が使う場合、設定が微妙に違う可能性があります(インクルードパス、ライブラリパスなど)。それを自動的に生成してくれるのがCMakeです。

CMakeLists.txt

CMakeLists.txtに書くことによってCMakeの設定を書きます。

とりあえず、簡単に書いてみます。

project---
        |
        |---src
        |     |
        |     |---main.cpp
        |
        |-CMakeLists.txt

このようなディレクトリ構成になってるとします。

下記の通りにmain.cppとCMakeLists.txtを書きます。

main.cpp

#include <iostream>

int main()
{
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

CMakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(sample)
ADD_EXECUTABLE(${PROJECT_NAME} src/main.cpp)

それではCMakeを起動します。
Windowsではcmakeをダウンロードしたもの。Linuxではcmake-guiをインストールすれば下の画面と同じになると思います。

"Where is the source code"に"projectフォルダのパスを、"Where to build the binaries"にprojectフォルダのパス+/build と入力してください。

そして"Configure"ボタンを押し、エラーがでなければ"Generate"ボタンを押します。
すると、buildフォルダの中に、WindowsならVisual Studioのプロジェクトファイルが、LinuxならMakefileが出来上がってると思います。

ビルドすればプログラムをビルドできるはずです。

ファイルが複数ある場合

上記はファイルが1つでしたが、プログラムを作るときはファイルが複数あると思います。

project---
        |
        |---src
        |     |
        |     |---main.cpp
        |     |
        |     |---test.h
        |     |
        |     |---test.cpp
        |
        |-CMakeLists.txt

main.cpp

#include "test.h"

int main()
{
    Hello();
    return 0;
}

test.h

#pragma once

#include <iostream>

void Hello();

test.cpp

#include "test.h"

void Hello()
{
    std::cout << "Hello, World!" << std::endl;
}

この場合、CMakeLists.txtを以下のようにします。

CMakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

PROJECT(sample)

SET(PROJECT_HERS
  src/test.h
)

SET(PROJECT_SRCS
  src/test.cpp
  src/main.cpp
)

ADD_EXECUTABLE(${PROJECT_NAME}
  ${PROJECT_HERS}
  ${PROJECT_SRCS}
)

こうすることでファイルがリンクされます。
ただし、ADD_EXECUTABLEはプロジェクトにつき一回しかできません。 SETによって、"PROJECT_SRCS"にソースファイルを、"PROJECT_HERS"にヘッダーファイルをセットしています。

CMakeの使いみち

これぐらいのプログラムならCMake使わなくてもいいですが、ライブラリなどを使うときにCMakeはとても便利に使えます。
ライブラリを使うときのやり方はそのうち…