Cross PlatformMakeながぬまたつみ
CMake知ってますか?● 自分のプロダクトで使っている● 誰かのプロダクトをビルドするときに  使ったことがある● 聞いた事ならある● まあ、よく食べるよ
CMake知ってますか?  Cakeではありません
CMake
make使っていますか    alias kachi = make
Hello World (Unix)$ vi hello.c#include <stdio.h>int main(void) { printf("Hello, world!n"); }$ gcc hello.c -o hello$ ./hell...
make Hello World$ lsMakefile hello.c$ makegcc hello.c -o hello$ lsMakefile hello.c hello
で、Windowsは?Visual Studio 2010でプロジェクトを作ってビルド。コードは同じ。
で、Eclipse(CDT)は?プロジェクトを作ってビルド。コードは同じ。
で、●   Borland C++ は?●   MinGW は?●   Visual Studio 2008 は?●   Visual Studio 2005 は?●   Visual Studio .NET 2003 は?●   Visual...
みんなどうしてるの?クロスプラットフォームアプリケーション●   Google Chrome ● OpenCV●   VirtualBox    ● LLVM●   KDE           ● Scribus●   MySQL
Autotools...? (GNU build system)$ ./configure$ make
CMake !$ mkdir build && cd build$ cmake ..$ make
CMake 概要CMakeLists.txt                 Unix Makefile                 MinGW Makefile                 NMake Makefile        ...
CMakeによるビルド$ mkdir build && cd build   ビルド用のディレクトリ   生成物はすべてここに置かれる$ cmake ..   CMakeLists.txtの場所を参照   Makefileが生成される$ make
CMakeのいいところ #1ソースファイルのある場所を汚さない$ mkdir build && cd build$ cmake ..$ make$ cd .. && rm -rf buildもとどおり。
CMakeのいいところ #2CMakeLists.txtがかんたんproject(HelloWorld)add_executable(hello hello.c)これだけ。たった2行。しかもわかりやすい。
CMakeLists.txt文法が超簡単コマンド(【引数1】【引数2】 ...)これだけ。
CMakeのいいところ #3マルチプラットフォーム対応先ほどのHelloWorldは... Windows、Linux、MacOS X、 FreeBSD、IRIX、AIX、Sun OS、HP-UXなどに対応。
CMakeのいいところ #4マルチIDE対応先ほどのHelloWorldは... GNU Make、NMake、Watcom WMake、 Visual Studio (6〜11)、ClodeBlocks、 Eclipse CDTなどに対応。
CMakeのいいところ #5ライブラリのリンクが簡単find_package (Boost)include_directories (${Boost_INCLUDE_DIR})add_executable (foo foo.c)target_l...
CMakeのいいところ #6オプションの指定がGUIでできる。● cmake (コマンドライン)● cursesベースのccmake● Qtベースのcmake-gui● どれでも同じことができる
ccmake
cmake-gui
CMakeのいいところ #nそれだけではない。
CPackインストーラーの作成。● NSIS (Windows Installer)● Deb / RPM / tgz● MacOS X DragNDrop /  PackageMaker
CPack (Debの例)project (Hello)add_executable (hello hello.c)install (TARGETS hello DESTINATION bin)set (CPACK_GENERATOR "DEB...
CTest● テストケースの実行(全体・個別)● テスト結果の管理
CDash● WebベースのCIツール● テスト結果の表示● 履歴やビルド状況などの表示
お好みでどうぞ● それぞれ独立して動作する● 組み合わせても、組み合わせなくても  OK
まとめ● gccコマンドの代わりにcmakeを● Makefileの代わりにCMakeLists.txtを● ツールを使ってさらに便利に  ○ CPack / CTest● CUIとGUIでオプション指定  ○ cmake / ccmake /...
http://www.cmake.org/Cross PlatformMakeありがとうございました。
find_packageFindXXX.cmakeが呼び出される自分で 〜.cmake を作ることもできるset (CMAKE_MODULE_PATH    ${CMAKE_MODULE_PATH}    自分のモジュールがあるパス)
よく使う変数●   CMAKE_SOURCE_DIR●   CMAKE_CURRENT_SOURCE_DIR●   CMAKE_BINARY_DIR●   CMAKE_C_FLAGS●   CMAKE_CXX_FLAGShttp://www.c...
よく使うコマンド●   ADD_EXECUTABLE / ADD_LIBRARY●   MESSAGE●   INCLUDE_DIRECTORIES●   TARGET_LINK_LIBRARYhttp://www.cmake.org/Wiki...
資料● CMake公式サイト● CMake-2.8 Documentation● Master Index CMake
Upcoming SlideShare
Loading in...5
×

Cross Platform Make

1,706

Published on

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

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,706
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
8
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Cross Platform Make

  1. 1. Cross PlatformMakeながぬまたつみ
  2. 2. CMake知ってますか?● 自分のプロダクトで使っている● 誰かのプロダクトをビルドするときに 使ったことがある● 聞いた事ならある● まあ、よく食べるよ
  3. 3. CMake知ってますか? Cakeではありません
  4. 4. CMake
  5. 5. make使っていますか alias kachi = make
  6. 6. Hello World (Unix)$ vi hello.c#include <stdio.h>int main(void) { printf("Hello, world!n"); }$ gcc hello.c -o hello$ ./helloHello, world!
  7. 7. make Hello World$ lsMakefile hello.c$ makegcc hello.c -o hello$ lsMakefile hello.c hello
  8. 8. で、Windowsは?Visual Studio 2010でプロジェクトを作ってビルド。コードは同じ。
  9. 9. で、Eclipse(CDT)は?プロジェクトを作ってビルド。コードは同じ。
  10. 10. で、● Borland C++ は?● MinGW は?● Visual Studio 2008 は?● Visual Studio 2005 は?● Visual Studio .NET 2003 は?● Visual Studio .NET は?● Visual Studio 6.0 は?● Mac は?
  11. 11. みんなどうしてるの?クロスプラットフォームアプリケーション● Google Chrome ● OpenCV● VirtualBox ● LLVM● KDE ● Scribus● MySQL
  12. 12. Autotools...? (GNU build system)$ ./configure$ make
  13. 13. CMake !$ mkdir build && cd build$ cmake ..$ make
  14. 14. CMake 概要CMakeLists.txt Unix Makefile MinGW Makefile NMake Makefile Visual Studio (.prj) CMake Eclipse (.project)
  15. 15. CMakeによるビルド$ mkdir build && cd build ビルド用のディレクトリ 生成物はすべてここに置かれる$ cmake .. CMakeLists.txtの場所を参照 Makefileが生成される$ make
  16. 16. CMakeのいいところ #1ソースファイルのある場所を汚さない$ mkdir build && cd build$ cmake ..$ make$ cd .. && rm -rf buildもとどおり。
  17. 17. CMakeのいいところ #2CMakeLists.txtがかんたんproject(HelloWorld)add_executable(hello hello.c)これだけ。たった2行。しかもわかりやすい。
  18. 18. CMakeLists.txt文法が超簡単コマンド(【引数1】【引数2】 ...)これだけ。
  19. 19. CMakeのいいところ #3マルチプラットフォーム対応先ほどのHelloWorldは... Windows、Linux、MacOS X、 FreeBSD、IRIX、AIX、Sun OS、HP-UXなどに対応。
  20. 20. CMakeのいいところ #4マルチIDE対応先ほどのHelloWorldは... GNU Make、NMake、Watcom WMake、 Visual Studio (6〜11)、ClodeBlocks、 Eclipse CDTなどに対応。
  21. 21. CMakeのいいところ #5ライブラリのリンクが簡単find_package (Boost)include_directories (${Boost_INCLUDE_DIR})add_executable (foo foo.c)target_link_libraries (foo ${Boost_LIBRARIES})
  22. 22. CMakeのいいところ #6オプションの指定がGUIでできる。● cmake (コマンドライン)● cursesベースのccmake● Qtベースのcmake-gui● どれでも同じことができる
  23. 23. ccmake
  24. 24. cmake-gui
  25. 25. CMakeのいいところ #nそれだけではない。
  26. 26. CPackインストーラーの作成。● NSIS (Windows Installer)● Deb / RPM / tgz● MacOS X DragNDrop / PackageMaker
  27. 27. 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)
  28. 28. CTest● テストケースの実行(全体・個別)● テスト結果の管理
  29. 29. CDash● WebベースのCIツール● テスト結果の表示● 履歴やビルド状況などの表示
  30. 30. お好みでどうぞ● それぞれ独立して動作する● 組み合わせても、組み合わせなくても OK
  31. 31. まとめ● gccコマンドの代わりにcmakeを● Makefileの代わりにCMakeLists.txtを● ツールを使ってさらに便利に ○ CPack / CTest● CUIとGUIでオプション指定 ○ cmake / ccmake / cmake-gui
  32. 32. http://www.cmake.org/Cross PlatformMakeありがとうございました。
  33. 33. find_packageFindXXX.cmakeが呼び出される自分で 〜.cmake を作ることもできるset (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} 自分のモジュールがあるパス)
  34. 34. よく使う変数● 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
  35. 35. よく使うコマンド● ADD_EXECUTABLE / ADD_LIBRARY● MESSAGE● INCLUDE_DIRECTORIES● TARGET_LINK_LIBRARYhttp://www.cmake.org/Wiki/CMake_Useful_Variables
  36. 36. 資料● CMake公式サイト● CMake-2.8 Documentation● Master Index CMake
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×