Mercurial > hg > Papers > 2017 > ikkun-osc
view osc.html @ 17:14989d0ed077 draft default tip
add CMakeLists.txt
author | ikkun |
---|---|
date | Sat, 17 Jun 2017 11:39:18 +0900 |
parents | eef7b6e3dac3 |
children |
line wrap: on
line source
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>CMake 入門</title> <meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 1.9.3 (2011-10-30) [x86_64-darwin10]"> <meta name="author" content="Takui Higashionna" > <!-- style sheet links --> <link rel="stylesheet" href="s6/themes/projection.css" media="screen,projection"> <link rel="stylesheet" href="s6/themes/screen.css" media="screen"> <link rel="stylesheet" href="s6/themes/print.css" media="print"> <link rel="stylesheet" href="s6/themes/blank.css" media="screen,projection"> <!-- JS --> <script src="s6/js/jquery-1.11.3.min.js"></script> <script src="s6/js/jquery.slideshow.js"></script> <script src="s6/js/jquery.slideshow.counter.js"></script> <script src="s6/js/jquery.slideshow.controls.js"></script> <script src="s6/js/jquery.slideshow.footer.js"></script> <script src="s6/js/jquery.slideshow.autoplay.js"></script> <!-- prettify --> <link rel="stylesheet" href="scripts/prettify.css"> <script src="scripts/prettify.js"></script> <script> $(document).ready( function() { Slideshow.init(); $('code').each(function(_, el) { if (!el.classList.contains('noprettyprint')) { el.classList.add('prettyprint'); el.style.display = 'block'; } }); prettyPrint(); } ); </script> <!-- Better Browser Banner for Microsoft Internet Explorer (IE) --> <!--[if IE]> <script src="s6/js/jquery.microsoft.js"></script> <![endif]--> </head> <body> <div class="layout"> <div id="header"></div> <div id="footer"> <div align="right"> <img src="s6/images/logo.svg" width="200px"> </div> </div> </div> <div class="presentation"> <div class='slide cover'> <table width="90%" height="90%" border="0" align="center"> <tr> <td> <div align="center"> <h1><font color="#808db5">CMake 入門</font></h1> </div> </td> </tr> <tr> <td> <div align="left"> Takui Higashionna <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;"> </div> </td> </tr> </table> </div> <div class='slide '> <!-- === begin markdown block === generated by markdown/1.2.0 on Ruby 1.9.3 (2011-10-30) [x86_64-darwin10] on 2017-06-16 20:21:09 +0900 with Markdown engine kramdown (1.9.0) using options {} --> <!-- _S9SLIDE_ --> <h1 id="cmake">Cmakeとはなにか</h1> <ul> <li>ビルドプロセスを管理するツール</li> <li> <p>ビルドプロセスとは</p> </li> <li>ソースコードをコンパイルする</li> <li>ソースコードとコンパイラを探す</li> <li>コンパイルされた.oファイルをリンクしてライブラリや実行形式にする</li> <li>テストコードを使ってテストを行う</li> <li>生成されたライブラリやコマンドをインストールする</li> <li>パッケージを作成して配布可能な形にする</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="section">従来の方法</h1> <ul> <li>makeを使う。makefileを直接書きくだす</li> <li>automakeとautoconfを使う</li> <li>Javaならばmavenあるいはgradleを用いる</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="section-1">従来の方法の欠点</h1> <ul> <li>Makefileは本質的にシステム依存(コンパイラの場所、ライブラリの場所)</li> <li>automakeは煩雑で難易度が高い</li> <li>mavenはjavaにしか対応していない</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="cmake-1">CMakeを使う利点</h1> <ul> <li>設定ファイル(CMakeLists.txt)がシンプル</li> <li>CMakeがコンパイラやライブラリを自動的に検索する</li> <li>テストやパッケージング用のプラグインが豊富にある</li> <li>Makefileを生成し、実際のビルドはmakeコマンドで行う</li> <li>out-of-placeビルド対応(ソースツリーの外でビルドを行う)</li> <li>Ninjaによる並列コンパイルが可能</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="cmake-2">実際にCMakeを使ってみよう</h1> <ul> <li>Hello World用のCMakeLists.txtを作る</li> <li>Makefileを生成しビルドしてみる</li> <li>out-of-placeビルドを試してみる</li> <li>テストを行う</li> <li>ソースコード生成を試してみる</li> <li>CUDAを使ってみる</li> <li>Ninja</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="hello-worldcmakeliststxt">Hello World用のCMakeLists.txtを作る</h1> <ul> <li>target名とソースコードを以下のように指定する</li> </ul> <p>add_executable ( hello hellow.c )</p> <ul> <li>helloがtarget名となる</li> <li>target名が生成される実行形式(コマンド)の名前となる。</li> <li>makeコマンドのターゲットにもなる <a href="file:sample/CmakeLists.txt">CmakeLists.txt</a></li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="makefile">Makefileを生成しビルドしてみる</h1> <ul> <li>cmake .でMakefileを作成する</li> <li>make helloでビルドする</li> <li>生成されたhelloファイルを./helloで実行する</li> <li>MakeFileを作り直す場合、MakeFilesとMakeFileCache.txtを削除してから</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="auto-of-place">auto-of-placeビルドを試してみる</h1> <ul> <li>別のディレクトリに移動し、cmake ./hoge/hello でそのディレクトリにMakeFileを作成することができる</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="section-2">テストを行う</h1> <ul> <li>MakeLists.txtに以下の様にかく <a href="file:sample1/CmakeLists.txt">CmakeLists.txt</a></li> <li>CMake .でMakeFileを作成する</li> <li>make testでテストすることができる。</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="section-3">ソースコード生成を試してみる</h1> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="cuda">CUDAを使ってみる</h1> <ul> <li>プロジェクトに必要なcmakeの最低バージョンをを設定します。 cmake_minimum_required(VERSION 3.7)</li> <li>必要なCUDAのパッケージを設定します。 find_package(CUDA REQUIRED)</li> <li>必要なCUDAライブラリのpathを設定します。 include_directories(/Developer/NVIDIA/CUDA-8.0/samples/common/inc)</li> <li>target名とソースコードを以下のように指定する cuda_add_executable(matrixMul matrixMul.cu)</li> <li>cmake .でMakefileを作成し、make matrixMul.cuでビルドします <a href="file:sample2/CmakeLists.txt">CmakeLists.txt</a> # Ninja</li> <li>cmkae に -G Ninjaオプションをつけてninjaのbuildファイルとルールファイルを作成します。</li> <li>ninjaでNinjaによるコンパイルを行います。</li> </ul> <p>LLVMの例題もやるのでLLVMの場所も書いておく</p> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="section-4">まとめ</h1> <!-- === end markdown block === --> </div> </div><!-- presentation --> </body> </html>