# HG changeset patch # User ikkun # Date 1497611784 -32400 # Node ID 33a4e0db0664aa5a9ca6b1e86aaf11e4bd1a8a3e # Parent 33cbafd4103650c6c839ddca4df581af5ebdbb72 add html diff -r 33cbafd41036 -r 33a4e0db0664 osc.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/osc.html Fri Jun 16 20:16:24 2017 +0900 @@ -0,0 +1,259 @@ + + + + + CMake 入門 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + + + + + + +
+
+

CMake 入門

+
+
+
+ Takui Higashionna + +
+
+
+
+ +
+ + + +

Cmakeとはなにか

+
    +
  • ビルドプロセスを管理するツール
  • +
  • +

    ビルドプロセスとは

    +
  • +
  • ソースコードをコンパイルする
  • +
  • ソースコードとコンパイラを探す
  • +
  • コンパイルされた.oファイルをリンクしてライブラリや実行形式にする
  • +
  • テストコードを使ってテストを行う
  • +
  • 生成されたライブラリやコマンドをインストールする
  • +
  • パッケージを作成して配布可能な形にする
  • +
+ + +
+
+ +

従来の方法

+
    +
  • makeを使う。makefileを直接書きくだす
  • +
  • automakeとautoconfを使う
  • +
  • Javaならばmavenあるいはgradleを用いる
  • +
+ + +
+
+ +

従来の方法の欠点

+
    +
  • Makefileは本質的にシステム依存(コンパイラの場所、ライブラリの場所)
  • +
  • automakeは煩雑で難易度が高い
  • +
  • mavenはjavaにしか対応していない
  • +
+ + +
+
+ +

CMakeを使う利点

+
    +
  • 設定ファイル(CMakeLists.txt)がシンプル
  • +
  • CMakeがコンパイラやライブラリを自動的に検索する
  • +
  • テストやパッケージング用のプラグインが豊富にある
  • +
  • Makefileを生成し、実際のビルドはmakeコマンドで行う
  • +
  • out-of-placeビルド対応(ソースツリーの外でビルドを行う)
  • +
  • Ninjaによる並列コンパイルが可能
  • +
+ + +
+
+ +

実際にCMakeを使ってみよう

+
    +
  • Hello World用のCMakeLists.txtを作る
  • +
  • Makefileを生成しビルドしてみる
  • +
  • out-of-placeビルドを試してみる
  • +
  • テストを行う
  • +
  • ソースコード生成を試してみる
  • +
  • CUDAを使ってみる
  • +
  • Ninja
  • +
+ + +
+
+ +

Hello World用のCMakeLists.txtを作る

+ +
    +
  • target名とソースコードを以下のように指定する
  • +
+ +

add_executable ( hello hellow.c )

+ +
    +
  • helloがtarget名となる
  • +
  • target名が生成される実行形式(コマンド)の名前となる。
  • +
  • makeコマンドのターゲットにもなる +CmakeLists.txt
  • +
+ + +
+
+ +

Makefileを生成しビルドしてみる

+
    +
  • cmake .でMakefileを作成する
  • +
  • make helloでビルドする
  • +
  • 生成されたhelloファイルを./helloで実行する
  • +
  • MakeFileを作り直す場合、MakeFilesとMakeFileCache.txtを削除してから
  • +
+ + +
+
+ +

auto-of-placeビルドを試してみる

+
    +
  • 別のディレクトリに移動し、cmake ./hoge/hello でそのディレクトリにMakeFileを作成することができる
  • +
+ + +
+
+ +

テストを行う

+
    +
  • MakeLists.txtに以下の様にかく +CmakeLists.txt
  • +
  • CMake .でMakeFileを作成する
  • +
  • make testでテストすることができる。
  • +
+ + +
+
+ +

ソースコード生成を試してみる

+ + +
+
+ +

CUDAを使ってみる

+
    +
  • プロジェクトに必要なcmakeの最低バージョンをを設定します。 +cmake_minimum_required(VERSION 3.7)
  • +
  • 必要なCUDAのパッケージを設定します。 +find_package(CUDA REQUIRED)
  • +
  • 必要なCUDAライブラリのpathを設定します。 +include_directories(/Developer/NVIDIA/CUDA-8.0/samples/common/inc)
  • +
  • target名とソースコードを以下のように指定する +cuda_add_executable(matrixMul matrixMul.cu)
  • +
  • cmake .でMakefileを作成し、make matrixMul.cuでビルドします
  • +
+ + +
+
+ +

Ninja

+
    +
  • cmkae に -G Ninjaオプションをつけてninjaのbuildファイルとルールファイルを作成します。
  • +
  • ninjaでNinjaによるコンパイルを行います。
  • +
+ +

LLVMの例題もやるのでLLVMの場所も書いておく

+ + +
+
+ +

まとめ

+ + +
+ + +
+ +