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でテストすることができる。 # ソースコード生成を試してみる # 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の場所も書いておく # まとめ