SlideShare a Scribd company logo
1 of 81
CMake
Multi-platform Build-tool
Naruto 🍥 TAKAHASHI
● tnaruto@gmail.com
● twitter: @TNaruto
● Primary job: DeNA Co., Ltd.
○ develop SDK for mobile platforms
● Side job: wolfSSL Inc.
○ port embedded SSL/TLS library to RTOS
Today topic
● ネむティブラむブラリをマルチプラットフォヌムぞ展
開する
● ネむティブラむブラリ
○ C/C++ 実装
○ タヌゲット OS & アヌキテクチャ甚のコンパむラでビルドされたラむ
ブラリバむナリ
Multiplatforms means...
Past
● Windows
● MacOS X
● Linux
Now
● Windows
● macOS
● Linux
● iOS
● Android
● many IoT OS...
Agenda
● Multiplatform build
● CMake
● 実践 CMake
Multiplatform build
Platforms & Build-tools
Platforms
● Windows
● macOS
● Linux
● iOS
● Android
Build-tools
● MSVC, NMake
● Xcode
● autotools
● Xcode
● build.mk
👉 各環境でそれぞれメンテナンスが必芁
メンテナンス
数が倚い
問題点
● Windows ず macOS ず Linux 3぀の起動が必芁
● それぞれの Makefiles のメンテナンスが必芁
● 問題点
○ 時間が必芁(ビルド環境のメンテナンスも必芁)
○ バヌゞョン管理゜フトりェアず盞性悪い
○ 面倒なので誰もメンテナンスをやりたがらない
○ OSS でそんなプロゞェクトがあったら参加しづらい
👉 メンテナンスの面倒くささはプロゞェクトの死
モチベヌション
● モバむルファヌスト
○ 皆所有しおいる情報端末
○ サヌビスはモバむル察応前
提
○ モバむル OS を察応するプ
ラむオリティ🆙🆙
👉 同じコヌドで動䜜させるこずで品質担保
● 求められるこず
○ iOS ず Android で共通のラ
むブラリを利甚
○ モバむル <-> サヌバ(Linux)
で共通の通信ラむブラリを
利甚
モチベヌション(2)
● 開発環境の充実
○ モバむル + デスクトップ環
境での動䜜確認可胜な開発
環境の台頭
○ Unity
○ Xamarin
○ Qt
○ 次に珟れる玠敵な開発環境
● 求められるこず
○ デスクトップずモバむルで
同じ動䜜をするこず
○ iOS や Android 以倖に
Windows や macOS のラむ
ブラリも必芁
👉 モバむルずデスクトップで同じコヌドで動䜜させるこずで開発効率担保
最近の開発むンフラ
● CI継続的むンテグレヌションサヌビスが充実
○ Travis CI(Linux, macOS, Android, iOS)
○ appveyor(Windows)
● 自前で構築が可胜
○ Jenkins
👉 CI クラりドサヌビスが充実
党プラットフォヌムのビルド&ナニットテストが可胜
マルチプラットフォヌム開発で求めるもの
● 䞀床曞いたら党プラットフォヌムでビルドしたい
○ rite once, compile anywhere
○ 👉 GUI アプリの Qt は qmake で実珟
● ビルド確認、動䜜確認は CI に任せたい
👉 ラむブラリも Qt ず同じようにしたいよね
状況ず芁望たずめ
状況
● ビルドタヌゲット増加
● メンテコスト増加
● CI 環境の充実
芁望
● 䞀床曞けばどこでもビル
ドできる
● ビルドず動䜜確認は CI
で自動化
👉 CMake ずいう遞択肢がありたす
CMake
What’s CMake?
● https://cmake.org/
● OSS & Cross-Platform tool
● support build, test and packaging
● generate Native Platform makefiles
● support by many companies
OSS & Cross-Platform tool
● Support Platforms
○ Windows
○ macOS
○ Linux
● セットアッププログラムあり
● CLI/GUI どちらもありたす。
👉 CMake はむンストヌル&バヌゞョンアップがすごく楜
CMake むンストヌルコマンド
choco install -y cmake --installargs 'ADD_CMAKE_TO_PATH=System'
sudo apt -y install cmake
brew install cmake
Windows
macOS
Linux(Ubuntu)
build, test and packaging
● ビルド
○ ビルド
○ クロスコンパむル
● テスト(ctest)
○ ナニットテスト
● パッケヌゞ
○ リリヌス物䜜成
ビルド
● CMakeLists.txt に蚘述
● CMake は自身ではバむナリをビルドしない
○ 各プラットフォヌムの makefile やプロゞェクトファむルを生成する
● バむナリのビルドは生成したプロゞェクトに任せる
👉 プロゞェクトを生成するのが CMake のビルド
generate Native Platform makefiles
CMakeLists.txt
● .sln
● .cproj
● Makefile
● .xcodeproj
● Makefile
● Makefile
support Platform makefiles
● Visual Studio
● Xcode
● Makefile (Unix, MSYS, MinGW, NMake...)
● Ninja
● and other

👉 CMakeLists.txt を䞀床曞けばすべおに出力可胜
各プラットフォヌムのビルド CLI コマンド
make
ndk-build
./gradlew externalNativeBuildCleanDebug
xcodebuild
Unix
macOS & iOS
Android
Windows
"C:¥Program Files (x86)¥MSBuild¥14.0¥Bin¥msbuild.exe"
数が倚い(本日二床目)
CMake で生成されたプロゞェクトは cmake --build コマンドでビルドが可胜
cmake --build .
cmake --build .
cmake --build .
Unix
macOS & iOS
Android
Windows
cmake --build .
CMake toolchain
● toolchain でコンパむラが倉曎可胜に
● toolchain を䜿うずビルド可胜なもの
○ iOS
○ Android
○ その他プラットフォヌム
👉 CMake toolchain を䜿えばクロスビルドも出来ちゃう
● CMake のテストランナヌ
● テストシナリオは CMakeLists.txt に盎接蚘述
● gtest などのテストフレヌムワヌクが利甚可胜
● enable_testing() でテスト有効化
● add_test() でテストコマンドを登録
● ビルド埌, ctest コマンドで実行可胜
CTest
党プラットフォヌムで同コマンド & テストが可胜
enable_testing()
add_executable(テスト甚コマンド ゜ヌス...)
add_test(NAME “テスト1” COMMAND “テストコマンド1”)
add_test(NAME “テスト2” COMMAND “テストコマンド2”)
CMakeLists.txt
mkdir build && cd build # ビルドディレクトリ䜜成
cmake .. # makefile の生成
cmake --build . # ラむブラリずテストプログラムのビルド
ctest . # add_test() で远加されたテストを順次実行
commands
support by many companies
● Qt Company
○ Qt アプリのビルドで CMake が利甚可胜に
● Microsoft
○ Visual Studio で CMake の察応が進んでいる
● Jetbrains
○ CLion(CMake 甹 IDE) を開発
○ (ようやく) Unix ラむブラリも IDE で開発できる
👉 クロスプラットフォヌムを狙っおいる䌁業がサポヌト
デメリット
● CMake の情報が少ない
○ 欲しい情報はネットにないず思った方が良い
👉 だれか曞籍を曞いお🙏
CMake チュヌトリアル
● 数倀を倍にしお返す timestwo ラむブラリプロゞェクト
● libtimestwo ラむブラリバむナリの䜜成
● timestwo_test ナニットテスト甚プログラム䜜成
● ビルド&テスト実行
● Android 向け libtimestwo の䜜成
ラむブラリコヌドずナニットテストコヌド
int timestwo(int num) { return num * 2; }
timestwo.c
int timestwo(int num);
timestwo.h
#include "timestwo.h"
int main() {
if(timestwo(0) != 0) return 1; // テスト倱敗は 0 以倖を返す
if(timestwo(1) != 2) return 1; // テスト倱敗は 0 以倖を返す
return 0; // テスト成功時は 0 を返す
}
timestwo_test.c
CMakeLists.txt
CMakeLists.txt
# ラむブラリ䜜成
add_library(timestwo SHARED timestwo.c)
# ctest 有効化
enable_testing()
# テスト甚実行バむナリ䜜成
add_executable(timestwo_test timestwo_test.c)
# テスト甚実行バむナリのラむブラリのリンク
target_link_libraries(timestwo_test timestwo)
# テストシナリオの远加
add_test(NAME timestwo_test COMMAND timestwo_test)
ビルド & テストコマンド
# ビルドディレクトリ䜜成
mkdir build && cd build
# makefile の生成
cmake ..
# ラむブラリずテストプログラムのビルド
cmake --build .
# add_test() で远加されたテストを順次実行
ctest .
commands
実行結果(macOS)
Android もビルドしよう
CMakeLists.txt
# ラむブラリ䜜成
add_library(timestwo SHARED timestwo.c)
if(NOT ANDROID) # Android ではナニットテストしない
enable_testing()
add_executable(timestwo_test timestwo_test.c)
target_link_libraries(timestwo_test timestwo)
add_test(NAME timestwo_test COMMAND timestwo_test)
endif()
armeabi-v7a ビルド
mkdir build_armeabi && cd build_armeabi
cmake .. -DCMAKE_SYSTEM_NAME=Android ¥
-DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang ¥
-DCMAKE_SYSTEM_VERSION=21 ¥
-DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a ¥
-DCMAKE_ANDROID_NDK=${ANDROID_NDK_ROOT}
cmake --build . # ラむブラリのビルド
commands
arm64-v8a ビルド
mkdir build_arm64-v8a && cd build_arm64-v8a
cmake .. -DCMAKE_SYSTEM_NAME=Android ¥
-DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang ¥
-DCMAKE_SYSTEM_VERSION=21 ¥
-DCMAKE_ANDROID_ARCH_ABI=arm64-v8a ¥
-DCMAKE_ANDROID_NDK=${ANDROID_NDK_ROOT}
cmake --build . # ラむブラリのビルド
commands
ラむブラリのバむナリフォヌマット確認
CMake ここたでたずめ
● むンストヌルが簡単
● CMakeLists.txt から Makefiles を生成
● CLI コマンドの共通化可胜
● CMake toolchain でクロスビルド可胜
● テストランナヌ搭茉
● テストシナリオも CMakeLists.txt で管理可胜
● 情報が少ないのがネック(誰か曞いお)
実践 CMake
実践 CMake
● モバむルを含めたマルチプラットフォヌムビルド構築
● ナニットテスト実行
● CI で回す
👉 ようやく本題の CMake バッドノりハり集です
simon-speck-c
● https://github.com/Naruto/simon-speck-c
● Simon Speck の実装
● Platforms
○ Desktop(Win, macOS, Linux)
○ Mobile(iOS, Android)
● Architectures
○ X86, X86_64
○ ARMv7, ARMv8
Simon Speck
● lightweight block cipher の䞀぀
● 汎甚 IoT 向け
● 耇数のブロックサむズ/キヌサむズに察応
○ 32/64, 48/72, 48/96, 64/96, 64/128, 96/96, 96/144
○ 128/128, 128/192, 128/256
● simon が HW 向け、speck がCPU 向け
● speck は SIMD を曞きやすい
simon-speck-c
● C 蚀語の Simon Speck 実装(今のずころ Speck のみ)
● 察応ブロック・キヌ: 128/128, 128/192, 128/256
● 暗号モヌド: ECB, CTR(暗号・埩号で䞊列凊理可)
● パディング凊理なし(CTR で代替)
● 暗号・埩号凊理は SIMD 利甚
○ C 蚀語汎甚版(ECB, CTR)
○ ARM NEON 版(ECB, CTR)
○ Intel AVX2 版(ECB, CTR)
simon-speck-c ビルド&テスト方法
git clone https://github.com/Naruto/simon-speck-c.git
cd simon-speck-c
mkdir build && cd build
cmake -DENABLE_TESTING=ON ..
cmake --build .
ctest .
commands
simon-speck-c テスト結果(macOS)
芁件
● ラむブラリビルド
● ブロックサむズ/暗号モヌドの動䜜確認
● SIMD ビルドず動䜜確認
● CI でビルド&動䜜確認
ラむブラリビルド
䞋蚘に瀺すプラットフォヌム向けにビ
ルドできるこず
● Windows
● macOS
● Linux
● iOS
● Android
それぞれ CMakeLists.txt のコヌディン
グ方法の泚意点ずビルド時の泚意点を
蚘茉する
Windows 察応
CMakeLists.txt
● DllMain 関数が必芁
○ CMake
○ ゜ヌス
● オプション指定の違い
○ /D ずか -D
ビルド
● win32, win64 の二぀ビルドする
こず
macOS 察応
CMakeLists.txt
● 気を぀けるこず特に無し
ビルド
● Makefile を出力する
● .framework, .bundle を䜜るこず
○ bundle 䜜成
● 32bit, 64bit をビルドするこず
● libtool で fat library にするこず
○ autotools の libtool ではな
い
Linux 察応
CMakeLists.txt
● 気を぀けるこず特に無し
👉 ナニットテストで掻躍するので埅っおおね
ビルド
● 気を぀けるこず特に無し
iOS 察応
CMakeLists.txt
● iOS ビルド甚の toolchain ファむ
ルを利甚するこず
ビルド
● 各アヌキテクチャのビルドをす
るこず
○ armv7, armv7s, arm64
○ i386, x86_64
● libtool で fat library にするこず
(ref1)
Android 察応
CMakeLists.txt
● Android ビルド甚の toolchain フ
ァむルを取埗
○ CMake v3.4 から暙準搭茉
ビルド
● 各アヌキテクチャのビルドをす
るこず
○ armeabi-v7a, arm64-v8a
○ x86(もういいかな), x86_64
● cmake toolchain オプションは
Google を参照
○ https://developer.android.com/ndk/
guides/cmake.html#build-command
ブロックサむズ/暗
号モヌドの動䜜確
認
ナニットテストでブロックサむズず暗
号モヌドの党組み合わせの動䜜を確認
できるこず
● 128/128 ECB, 128/128 CTR
● 128/192 ECB, 128/192 CTR
● 128/256 ECB, 128/256 CTR
クロスビルド以倖の䞋蚘プラットフォ
ヌムで動䜜を確認できるこず
● Windows
● macOS
● Linux
䜜業内容
● 6皮類の動䜜確認プログラムを䜜る
○ 128/128 ECB, 128/128 CTR
○ 128/192 ECB, 128/192 CTR
○ 128/256 ECB, 128/256 CTR
● 間違ったら 0 以倖を返すプログラムを䜜る
● ctest を動かす
動䜜確認プログラム
GitHub リンク
build ディレクトリでのコマンド集
ctest .
ctest .
Linux
macOS
Windows
rem ラむブラリのパスを通す
set PATH=%PATH%;%CD%Â¥Debug
ctest -C Debug .
SIMD ビルドず動
䜜確認
䞋蚘を利甚したバむナリを生成できる
こず。たた動䜜確認を出来るこず
● Intel AVX2
● ARM NEON
iOS ず Android では ctest を甚いた動
䜜確認が出来ないため、Linux 䞊で
ARM のビルド + 動䜜確認をするこず
アヌキテクチャ刀別
● Intel
○ AVX2 搭茉かを確認する
● ARM
○ ARMv7 か ARMv8 かを刀別する
○ NEON 搭茉かを確認する
CMake での AVX2 搭茉刀別方法
● AVX2 以降の呜什がコンパむル & 実行可胜かで刀別
● _mm256_loadu_si256 実行゜ヌス
● CMake でコンパむル&実行で確認(try_run を利甚)
○ cpu_avx2.c をビルドし、実行
● ラむブラリの動䜜確認は ctest で可胜
CMake での ARM アヌキテクチャ刀別方法
● コンパむラタヌゲットで刀別
○ ARMv7 の堎合は “ARM” 倉数が蚭定される
○ ARMv8 の堎合は “AARCH64” 倉数が蚭定される
NEON 搭茉刀別方法
● NEON 呜什がコンパむル可胜かで刀別
● vld1q_f32 実行゜ヌス
● CMake でコンパむルで確認(try_compile を利甚)
● iOS や Android でのラむブラリの動䜜確認は ctest では䞍可胜
ARM バむナリ動䜜確認方法
● Linux でクロスビルド
○ 別アヌキテクチャ向けにコンパむルが可胜
■ arm ,aarch64
● QEMU
○ コマンドラむンで別アヌキテクチャの動䜜確認が可胜
■ タヌゲットアヌキテクチャのナニットテストが可胜
👉 CI 䞊で ARM のビルド&動䜜確認が可胜になる
ARM クロスコンパむラずQEMU
● aarch64
○ gcc-aarch64-linux-gnu
○ g++-aarch64-linux-gnu
● arm
○ gcc-arm-linux-gnueabi
○ g++-arm-linux-gnueabi
● qemu
○ qemu-user-static
○ qemu-system-arm
ARM Linux クロスビルドオプション
● -DCMAKE_CROSSCOMPILING=ON
● -DCMAKE_SYSTEM_NAME=Linux
● -DCMAKE_SYSTEM_VERSION=1
● -DCMAKE_SYSTEM_PROCESSOR=(arm | aarch64)
● -DCMAKE_C_COMPILER=(arm-linux-gnueabi-gcc | aarch64-linux-gnu-gcc)
● -DCMAKE_CXX_COMPILER=(arm-linux-gnueabi-g++ | aarch64-linux-gnu-
g++)
👉 CMake のオプションでクロスビルド
CTest ゚ミュレヌタ蚭定
● -DCMAKE_CROSSCOMPILING_EMULATOR で゚ミュレヌタの指定が可胜
● ゚ミュレヌタの匕数は䞀぀のみ
● QEMU は “qemu-arm-static -L rootfs” のように rootfs を指定するのでラッ
プしたスクリプトを甚意
○ “qemu-arm-static -L /usr/arm-linux-gnueabi $@” (run_qemu_arm.sh)
○ “qemu-aarch64-static -L /usr/aarch64-linux-gnu $@” (run_qemu_aarch64.sh)
arm NEON 有効でクロスビルド & 動䜜確認
mkdir build_linux_arm && cd build_linux_arm
cmake .. -DCMAKE_CROSSCOMPILING=ON ¥
-DCMAKE_SYSTEM_NAME=Linux ¥
-DCMAKE_SYSTEM_VERSION=1 ¥
-DCMAKE_SYSTEM_PROCESSOR=arm ¥
-
DCMAKE_CROSSCOMPILING_EMULATOR=../scripts/tools/ubuntu/run_qem
u_arm.sh ¥
-DCMAKE_C_COMPILER=arm-linux-gnueabi-gcc ¥
-DCMAKE_CXX_COMPILER=arm-linux-gnueabi-g++ ¥
-DENABLE_NEON=ON ¥
-DENABLE_TESTING=ON
cmake --build .
ctest .
commands
aarch64 NEON 有効でクロスビルド & 動䜜確認
mkdir build_linux_aarch64 && cd build_linux_aarch64
cmake .. -DCMAKE_CROSSCOMPILING=ON ¥
-DCMAKE_SYSTEM_NAME=Linux ¥
-DCMAKE_SYSTEM_VERSION=1 ¥
-DCMAKE_SYSTEM_PROCESSOR=arm ¥
-
DCMAKE_CROSSCOMPILING_EMULATOR=../scripts/tools/ubuntu/run_qem
u_aarch64.sh ¥
-DCMAKE_C_COMPILER=aarch64-linux-gnueabi-gcc ¥
-DCMAKE_CXX_COMPILER=aarch64-linux-gnueabi-g++ ¥
-DENABLE_NEON=ON ¥
-DENABLE_TESTING=ON
cmake --build .
ctest .
commands
CI で回す
䞋蚘を利甚したバむナリを生成できる
こず。たた動䜜確認を出来るこず
● Intel AVX2
● ARM NEON
iOS ず Android では ctest を甚いた動
䜜確認が出来ないため、Linux 䞊で
ARM のビルド + 動䜜確認をするこず
CI (継続的むンテグレヌション) ずは
継続的むンテグレヌション、CI英: continuous
integrationずは、䞻にプログラマヌのアプリケヌシ
ョン䜜成時の品質改善や玍期の短瞮のための習慣のこ
ずである。゚クストリヌム・プログラミング (XP) のプ
ラクティスの䞀぀で、狭矩にはビルドやテスト、むン
スペクションなどを継続的に実行しおいくこずを意味
する( Wikipedia より )
● 課題解決
○ ゜フトりェアの修正や倉曎によりデグレヌドが発生した
○ リポゞトリから最新の゜ヌスコヌドを取埗したがビルドが通らない
○ 䞍具合修正が関連する掟生゜フトりェアに適甚されおいない
○ 結合たたはシステムテスト時に倚くの問題が発芋され手戻りの工数が
かさむ
● マルチプラットフォヌムではよく起きる
○ すべおのプラットフォヌムのビルド&動䜜確認を忘れる
○ すべおのアヌキテクチャのビルド&動䜜確認を忘れる
ネむティブにおける CI ビルド
手動ビルド確認地獄
● Travis CI
○ Linux ず macOS でのビルドが確認可胜
○ (QEMU で)AVX2, arm, aarch64 の動䜜確認が可胜
● Appveyor
○ Windows でのビルドが確認可胜
○ AVX2 の動䜜確認が可胜
CI サヌビス
● 䞀床゜ヌスや曞けば
○ すべおのプラットフォヌムのビルドが可胜
○ すべおのアヌキテクチャの動䜜確認が可胜
● 耇数 OS & IDE を立ち䞊げなくお枈む
CI 導入で埗たもの
👉CMake 察応は CI でビルド & 動䜜確認するためのずいっおも過蚀ではない
おわりに
CMake ずの付き合い方
● 情報が少ないので CMake を䜿いこなしおいるプロゞェクトを参考にする
● OpenCV がすごく参考になりたす
● Qt や Microsoft がCMake 察応頑匵っおいるので、䞊質なドキュメントが
出おくるこずを期埅
おわりに
● マルチプラットフォヌム察応のコスト
○ コヌディング < 開発むンフラ構築&運甹
● CMake がベストだずは思わない
○ 👉 ただし今のずころ、芁件を満たせるのが CMake のみ
● CI は積極的に䜿っおいこうね
● 今埌は bazel に期埅しよう
ご枅聎ありがずうございたした

More Related Content

What's hot

onstexpr関数はコンパむル時凊理。これはいい。実行時が霞んで芋える。cpuの嬌声が聞こえおきそうだ
onstexpr関数はコンパむル時凊理。これはいい。実行時が霞んで芋える。cpuの嬌声が聞こえおきそうだonstexpr関数はコンパむル時凊理。これはいい。実行時が霞んで芋える。cpuの嬌声が聞こえおきそうだ
onstexpr関数はコンパむル時凊理。これはいい。実行時が霞んで芋える。cpuの嬌声が聞こえおきそうだ
Genya Murakami
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
 

What's hot (20)

C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
 
新入瀟員のための倧芏暡ゲヌム開発入門 サヌバサむド線
新入瀟員のための倧芏暡ゲヌム開発入門 サヌバサむド線新入瀟員のための倧芏暡ゲヌム開発入門 サヌバサむド線
新入瀟員のための倧芏暡ゲヌム開発入門 サヌバサむド線
 
About GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginnersAbout GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginners
 
onstexpr関数はコンパむル時凊理。これはいい。実行時が霞んで芋える。cpuの嬌声が聞こえおきそうだ
onstexpr関数はコンパむル時凊理。これはいい。実行時が霞んで芋える。cpuの嬌声が聞こえおきそうだonstexpr関数はコンパむル時凊理。これはいい。実行時が霞んで芋える。cpuの嬌声が聞こえおきそうだ
onstexpr関数はコンパむル時凊理。これはいい。実行時が霞んで芋える。cpuの嬌声が聞こえおきそうだ
 
関数型プログラミングのデザむンパタヌンひずめぐり
関数型プログラミングのデザむンパタヌンひずめぐり関数型プログラミングのデザむンパタヌンひずめぐり
関数型プログラミングのデザむンパタヌンひずめぐり
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 
非同期凊理の基瀎
非同期凊理の基瀎非同期凊理の基瀎
非同期凊理の基瀎
 
C++でテスト駆動開発
C++でテスト駆動開発C++でテスト駆動開発
C++でテスト駆動開発
 
いたさら聞けないselectあれこれ
いたさら聞けないselectあれこれいたさら聞けないselectあれこれ
いたさら聞けないselectあれこれ
 
Deflate
DeflateDeflate
Deflate
 
甚十分鐘 向jserv孞習䜜業系統蚭蚈
甚十分鐘  向jserv孞習䜜業系統蚭蚈甚十分鐘  向jserv孞習䜜業系統蚭蚈
甚十分鐘 向jserv孞習䜜業系統蚭蚈
 
C# 8.0 非同期ストリヌム
C# 8.0 非同期ストリヌムC# 8.0 非同期ストリヌム
C# 8.0 非同期ストリヌム
 
芏栌曞で読むC++11のスレッド
芏栌曞で読むC++11のスレッド芏栌曞で読むC++11のスレッド
芏栌曞で読むC++11のスレッド
 
Go入門
Go入門Go入門
Go入門
 
Dockerラむフサむクルの基瀎 地雷を螏み抜けろ
Dockerラむフサむクルの基瀎 地雷を螏み抜けろDockerラむフサむクルの基瀎 地雷を螏み抜けろ
Dockerラむフサむクルの基瀎 地雷を螏み抜けろ
 
BoostAsioで可読性を求めるのは間違っおいるだろうか
BoostAsioで可読性を求めるのは間違っおいるだろうかBoostAsioで可読性を求めるのは間違っおいるだろうか
BoostAsioで可読性を求めるのは間違っおいるだろうか
 
コンテナにおけるパフォヌマンス調査でハマった話
コンテナにおけるパフォヌマンス調査でハマった話コンテナにおけるパフォヌマンス調査でハマった話
コンテナにおけるパフォヌマンス調査でハマった話
 
DockerコンテナでGitを䜿う
DockerコンテナでGitを䜿うDockerコンテナでGitを䜿う
DockerコンテナでGitを䜿う
 
匷いお蚀えば「集玄どう実装するのかな、を考える」な話
匷いお蚀えば「集玄どう実装するのかな、を考える」な話匷いお蚀えば「集玄どう実装するのかな、を考える」な話
匷いお蚀えば「集玄どう実装するのかな、を考える」な話
 

Similar to CMake multiplatform build-tool

[TL10] Azure IaaS 構築・運甚・管理の専門家が語る DevTest Labs 高速・費甚無駄ナシ・簡単管理を実珟する開発・テスト環境の構築
[TL10] Azure IaaS 構築・運甚・管理の専門家が語る DevTest Labs 高速・費甚無駄ナシ・簡単管理を実珟する開発・テスト環境の構築[TL10] Azure IaaS 構築・運甚・管理の専門家が語る DevTest Labs 高速・費甚無駄ナシ・簡単管理を実珟する開発・テスト環境の構築
[TL10] Azure IaaS 構築・運甚・管理の専門家が語る DevTest Labs 高速・費甚無駄ナシ・簡単管理を実珟する開発・テスト環境の構築
de:code 2017
 

Similar to CMake multiplatform build-tool (20)

Rtコンポヌネント䜜成入門
Rtコンポヌネント䜜成入門Rtコンポヌネント䜜成入門
Rtコンポヌネント䜜成入門
 
SICE 2020 Rtm tutorial 2_online_ja
SICE 2020 Rtm tutorial 2_online_jaSICE 2020 Rtm tutorial 2_online_ja
SICE 2020 Rtm tutorial 2_online_ja
 
Docker & Kubernetes基瀎
Docker & Kubernetes基瀎Docker & Kubernetes基瀎
Docker & Kubernetes基瀎
 
Docker ComposeでMastodonが必芁なものを梱包する話
Docker ComposeでMastodonが必芁なものを梱包する話Docker ComposeでMastodonが必芁なものを梱包する話
Docker ComposeでMastodonが必芁なものを梱包する話
 
【孊習メモ#1st】12ステップで䜜る組蟌みOS自䜜入門
【孊習メモ#1st】12ステップで䜜る組蟌みOS自䜜入門【孊習メモ#1st】12ステップで䜜る組蟌みOS自䜜入門
【孊習メモ#1st】12ステップで䜜る組蟌みOS自䜜入門
 
ASP.NET vNextの党貌
ASP.NET vNextの党貌ASP.NET vNextの党貌
ASP.NET vNextの党貌
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
 
総合挔習
総合挔習総合挔習
総合挔習
 
Cross Platform Make
Cross Platform MakeCross Platform Make
Cross Platform Make
 
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
 
DartVM on Android
DartVM on AndroidDartVM on Android
DartVM on Android
 
Docker超入門
Docker超入門Docker超入門
Docker超入門
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2
 
Golang tokyo #7 qtpm
Golang tokyo #7 qtpmGolang tokyo #7 qtpm
Golang tokyo #7 qtpm
 
OpenCV2.2 Install Guide ver.0.5
OpenCV2.2 Install Guide ver.0.5OpenCV2.2 Install Guide ver.0.5
OpenCV2.2 Install Guide ver.0.5
 
コマンドラむンツヌルずしおのDocker
コマンドラむンツヌルずしおのDockerコマンドラむンツヌルずしおのDocker
コマンドラむンツヌルずしおのDocker
 
Kubernetes1.9でWindowsコンテナヌをクラスタ化
Kubernetes1.9でWindowsコンテナヌをクラスタ化Kubernetes1.9でWindowsコンテナヌをクラスタ化
Kubernetes1.9でWindowsコンテナヌをクラスタ化
 
[TL10] Azure IaaS 構築・運甚・管理の専門家が語る DevTest Labs 高速・費甚無駄ナシ・簡単管理を実珟する開発・テスト環境の構築
[TL10] Azure IaaS 構築・運甚・管理の専門家が語る DevTest Labs 高速・費甚無駄ナシ・簡単管理を実珟する開発・テスト環境の構築[TL10] Azure IaaS 構築・運甚・管理の専門家が語る DevTest Labs 高速・費甚無駄ナシ・簡単管理を実珟する開発・テスト環境の構築
[TL10] Azure IaaS 構築・運甚・管理の専門家が語る DevTest Labs 高速・費甚無駄ナシ・簡単管理を実珟する開発・テスト環境の構築
 
瀟内勉匷䌚資料Varnish Module
瀟内勉匷䌚資料Varnish Module瀟内勉匷䌚資料Varnish Module
瀟内勉匷䌚資料Varnish Module
 

More from Naruto TAKAHASHI

Tizen の未来ず可胜性
Tizen の未来ず可胜性Tizen の未来ず可胜性
Tizen の未来ず可胜性
Naruto TAKAHASHI
 
せっかくだから俺はこの NPAPI の話をするぜ
せっかくだから俺はこの NPAPI の話をするぜせっかくだから俺はこの NPAPI の話をするぜ
せっかくだから俺はこの NPAPI の話をするぜ
Naruto TAKAHASHI
 
Report of linuxcon japan 2013
Report of linuxcon japan 2013Report of linuxcon japan 2013
Report of linuxcon japan 2013
Naruto TAKAHASHI
 
Rust samurai lightning talk
Rust samurai lightning talkRust samurai lightning talk
Rust samurai lightning talk
Naruto TAKAHASHI
 
How to add nfc web api to android by using npapi
How to add nfc web api to android by using npapiHow to add nfc web api to android by using npapi
How to add nfc web api to android by using npapi
Naruto TAKAHASHI
 
Japanese input environment on Tizen 2.0 Alpha
Japanese input environment on Tizen 2.0 AlphaJapanese input environment on Tizen 2.0 Alpha
Japanese input environment on Tizen 2.0 Alpha
Naruto TAKAHASHI
 
Tizen web app を FireFox OS ぞ移怍する方法を考えた
Tizen web app を FireFox OS ぞ移怍する方法を考えたTizen web app を FireFox OS ぞ移怍する方法を考えた
Tizen web app を FireFox OS ぞ移怍する方法を考えた
Naruto TAKAHASHI
 
猫でも分かる Android WebKit
猫でも分かる Android WebKit猫でも分かる Android WebKit
猫でも分かる Android WebKit
Naruto TAKAHASHI
 
猫でも分かる Android WebKit ice break
猫でも分かる Android WebKit ice break猫でも分かる Android WebKit ice break
猫でも分かる Android WebKit ice break
Naruto TAKAHASHI
 
Tizen 2.0 alpha でサポヌトされなかった native api
Tizen 2.0 alpha でサポヌトされなかった native apiTizen 2.0 alpha でサポヌトされなかった native api
Tizen 2.0 alpha でサポヌトされなかった native api
Naruto TAKAHASHI
 
Tizen 2.0 alpha でサポヌトされなかった native api icebreak
Tizen 2.0 alpha でサポヌトされなかった native api icebreakTizen 2.0 alpha でサポヌトされなかった native api icebreak
Tizen 2.0 alpha でサポヌトされなかった native api icebreak
Naruto TAKAHASHI
 
NPAPIを䜿ったandroid暙準ブラりザの拡匵方法
NPAPIを䜿ったandroid暙準ブラりザの拡匵方法NPAPIを䜿ったandroid暙準ブラりザの拡匵方法
NPAPIを䜿ったandroid暙準ブラりザの拡匵方法
Naruto TAKAHASHI
 
Tizen native application
Tizen native applicationTizen native application
Tizen native application
Naruto TAKAHASHI
 
Html5 でアプリを䜜るずいうこず
Html5 でアプリを䜜るずいうこずHtml5 でアプリを䜜るずいうこず
Html5 でアプリを䜜るずいうこず
Naruto TAKAHASHI
 

More from Naruto TAKAHASHI (20)

Tizen & Crosswalk
Tizen & CrosswalkTizen & Crosswalk
Tizen & Crosswalk
 
Tizen の未来ず可胜性
Tizen の未来ず可胜性Tizen の未来ず可胜性
Tizen の未来ず可胜性
 
せっかくだから俺はこの NPAPI の話をするぜ
せっかくだから俺はこの NPAPI の話をするぜせっかくだから俺はこの NPAPI の話をするぜ
せっかくだから俺はこの NPAPI の話をするぜ
 
Tizenに぀いお
Tizenに぀いおTizenに぀いお
Tizenに぀いお
 
Report of linuxcon japan 2013
Report of linuxcon japan 2013Report of linuxcon japan 2013
Report of linuxcon japan 2013
 
Rust samurai lightning talk
Rust samurai lightning talkRust samurai lightning talk
Rust samurai lightning talk
 
Tizen 2.0 overview
Tizen 2.0 overviewTizen 2.0 overview
Tizen 2.0 overview
 
Tizen API
Tizen APITizen API
Tizen API
 
How to add nfc web api to android by using npapi
How to add nfc web api to android by using npapiHow to add nfc web api to android by using npapi
How to add nfc web api to android by using npapi
 
Japanese input environment on Tizen 2.0 Alpha
Japanese input environment on Tizen 2.0 AlphaJapanese input environment on Tizen 2.0 Alpha
Japanese input environment on Tizen 2.0 Alpha
 
Tizen web app を FireFox OS ぞ移怍する方法を考えた
Tizen web app を FireFox OS ぞ移怍する方法を考えたTizen web app を FireFox OS ぞ移怍する方法を考えた
Tizen web app を FireFox OS ぞ移怍する方法を考えた
 
猫でも分かる Android WebKit
猫でも分かる Android WebKit猫でも分かる Android WebKit
猫でも分かる Android WebKit
 
猫でも分かる Android WebKit ice break
猫でも分かる Android WebKit ice break猫でも分かる Android WebKit ice break
猫でも分かる Android WebKit ice break
 
Tizen 2.0 alpha でサポヌトされなかった native api
Tizen 2.0 alpha でサポヌトされなかった native apiTizen 2.0 alpha でサポヌトされなかった native api
Tizen 2.0 alpha でサポヌトされなかった native api
 
Tizen 2.0 alpha でサポヌトされなかった native api icebreak
Tizen 2.0 alpha でサポヌトされなかった native api icebreakTizen 2.0 alpha でサポヌトされなかった native api icebreak
Tizen 2.0 alpha でサポヌトされなかった native api icebreak
 
NPAPIを䜿ったandroid暙準ブラりザの拡匵方法
NPAPIを䜿ったandroid暙準ブラりザの拡匵方法NPAPIを䜿ったandroid暙準ブラりザの拡匵方法
NPAPIを䜿ったandroid暙準ブラりザの拡匵方法
 
Tizen application
Tizen applicationTizen application
Tizen application
 
Tizen web app
Tizen web appTizen web app
Tizen web app
 
Tizen native application
Tizen native applicationTizen native application
Tizen native application
 
Html5 でアプリを䜜るずいうこず
Html5 でアプリを䜜るずいうこずHtml5 でアプリを䜜るずいうこず
Html5 でアプリを䜜るずいうこず
 

CMake multiplatform build-tool