Cross Platform Make

36
Cross Platform Make ながぬまたつみ

description

CMakeとはどんなもので、他のビルドツール(MakeやAutotoolsなど)と比べてどんな利点があるのかについて、初めて知る人を想定した解説です。NSEG第24回白馬合宿(2012年2月11日)の発表資料。

Transcript of Cross Platform Make

Page 1: Cross Platform Make

Cross Platform Makeながぬまたつみ

Page 2: Cross Platform Make

CMake知ってますか?

● 自分のプロダクトで使っている● 誰かのプロダクトをビルドするときに

使ったことがある● 聞いた事ならある● まあ、よく食べるよ

Page 3: Cross Platform Make

CMake知ってますか?

Cakeではありません

Page 4: Cross Platform Make

CMake

Page 5: Cross Platform Make

make使っていますか

alias kachi = 'make'

Page 6: Cross Platform Make

Hello World (Unix)

$ vi hello.c#include <stdio.h>int main(void) { printf("Hello, world!\n"); }$ gcc hello.c -o hello$ ./helloHello, world!

Page 7: Cross Platform Make

make Hello World

$ lsMakefile hello.c$ makegcc hello.c -o hello$ lsMakefile hello.c hello

Page 8: Cross Platform Make

で、Windowsは?

Visual Studio 2010でプロジェクトを作ってビルド。 コードは同じ。

Page 9: Cross Platform Make

で、Eclipse(CDT)は?

プロジェクトを作ってビルド。 コードは同じ。

Page 10: Cross Platform Make

で、

● Borland C++ は?● MinGW は?● Visual Studio 2008 は?● Visual Studio 2005 は?● Visual Studio .NET 2003 は?● Visual Studio .NET は?● Visual Studio 6.0 は?● Mac は?

Page 11: Cross Platform Make

みんなどうしてるの?

● Google Chrome● VirtualBox● KDE● MySQL

クロスプラットフォームアプリケーション

● OpenCV● LLVM● Scribus

Page 12: Cross Platform Make

Autotools...? (GNU build system)

$ ./configure$ make

Page 13: Cross Platform Make

CMake !

$ mkdir build && cd build$ cmake ..$ make

Page 14: Cross Platform Make

CMake 概要

CMakeLists.txt

CMake

Unix MakefileMinGW MakefileNMake MakefileVisual Studio (.prj)Eclipse (.project)

Page 15: Cross Platform Make

CMakeによるビルド

$ mkdir build && cd buildビルド用のディレクトリ

生成物はすべてここに置かれる

$ cmake ..CMakeLists.txtの場所を参照

Makefileが生成される

$ make

Page 16: Cross Platform Make

CMakeのいいところ #1

ソースファイルのある場所を汚さない

$ mkdir build && cd build$ cmake ..$ make$ cd .. && rm -rf build

もとどおり。

Page 17: Cross Platform Make

CMakeのいいところ #2

CMakeLists.txtがかんたん

project(HelloWorld)add_executable(hello hello.c)

これだけ。たった2行。しかもわかりやすい。

Page 18: Cross Platform Make

CMakeLists.txt

文法が超簡単

コマンド(【引数1】【引数2】 ...) これだけ。

Page 19: Cross Platform Make

CMakeのいいところ #3

マルチプラットフォーム対応

先ほどのHelloWorldは...Windows、Linux、MacOS X、FreeBSD、IRIX、AIX、Sun OS、HP-UX

などに対応。

Page 20: Cross Platform Make

CMakeのいいところ #4

マルチIDE対応

先ほどのHelloWorldは...GNU Make、NMake、Watcom WMake、Visual Studio (6〜11)、ClodeBlocks、Eclipse CDT

などに対応。

Page 21: Cross Platform Make

CMakeのいいところ #5

ライブラリのリンクが簡単

find_package (Boost)include_directories (${Boost_INCLUDE_DIR})add_executable (foo foo.c)target_link_libraries (foo ${Boost_LIBRARIES})

Page 22: Cross Platform Make

CMakeのいいところ #6

オプションの指定がGUIでできる。

● cmake (コマンドライン)● cursesベースのccmake● Qtベースのcmake-gui● どれでも同じことができる

Page 23: Cross Platform Make

ccmake

Page 24: Cross Platform Make

cmake-gui

Page 25: Cross Platform Make

CMakeのいいところ #n

それだけではない。

Page 26: Cross Platform Make

CPack

インストーラーの作成。

● NSIS (Windows Installer)● Deb / RPM / tgz● MacOS X DragNDrop /

PackageMaker

Page 27: Cross Platform Make

CPack (Debの例)

project (Hello)add_executable (hello hello.c)install (TARGETS hello DESTINATION bin)set (CPACK_GENERATOR "DEB")set (CPACK_DEBIAN_PACKAGE_MAINTAINER

"Naganuma Tatsumi") #requiredinclude (CPack)

Page 28: Cross Platform Make

CTest

● テストケースの実行(全体・個別)● テスト結果の管理

Page 29: Cross Platform Make

CDash

● WebベースのCIツール● テスト結果の表示● 履歴やビルド状況などの表示

Page 30: Cross Platform Make

お好みでどうぞ

● それぞれ独立して動作する● 組み合わせても、組み合わせなくても

OK

Page 31: Cross Platform Make

まとめ

● gccコマンドの代わりにcmakeを● Makefileの代わりにCMakeLists.txtを● ツールを使ってさらに便利に

○ CPack / CTest● CUIとGUIでオプション指定

○ cmake / ccmake / cmake-gui

Page 32: Cross Platform Make

Cross PlatformMake ありがとうございました。

http://www.cmake.org/

Page 33: Cross Platform Make

find_package

FindXXX.cmakeが呼び出される

自分で 〜.cmake を作ることもできる

set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} 自分のモジュールがあるパス)

Page 34: Cross Platform Make

よく使う変数

● CMAKE_SOURCE_DIR● CMAKE_CURRENT_SOURCE_DIR● CMAKE_BINARY_DIR● CMAKE_C_FLAGS● CMAKE_CXX_FLAGShttp://www.cmake.org/cmake/help/cmake-2-8-docs.html#section_Commands

Page 35: Cross Platform Make

よく使うコマンド

● ADD_EXECUTABLE / ADD_LIBRARY● MESSAGE● INCLUDE_DIRECTORIES● TARGET_LINK_LIBRARY

http://www.cmake.org/Wiki/CMake_Useful_Variables

Page 36: Cross Platform Make

資料

● CMake公式サイト

● CMake-2.8 Documentation● Master Index CMake