view osc.md @ 17:14989d0ed077 draft default tip

add CMakeLists.txt
author ikkun
date Sat, 17 Jun 2017 11:39:18 +0900
parents 3e6c01607f4e
children
line wrap: on
line source

title: CMake 入門
author: Takui Higashionna
profile:
lang: Japanese
code-engine: coderay

#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](file:sample/CmakeLists.txt)

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

# auto-of-placeビルドを試してみる
- 別のディレクトリに移動し、cmake ./hoge/hello でそのディレクトリにMakeFileを作成することができる

# テストを行う
- MakeLists.txtに以下の様にかく
[CmakeLists.txt](file:sample1/CmakeLists.txt)
- CMake .でMakeFileを作成する
- make testでテストすることができる。

# ソースコード生成を試してみる
- CMakeLists.txtにadd_custom_commandによって行います。
- OUTPUTで出力する出力されるファイル名を指定します。
- COMMANDで実行するコマンドを記述することで、生成スクリプトを実行します。

# 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でビルドします
[CmakeLists.txt](file:sample2/CmakeLists.txt)

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


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

# まとめ