Movatterモバイル変換


[0]ホーム

URL:


PPTX, PDF3,496 views

Golang tokyo #7 qtpm

golang tokyo #7 qtpm

Embed presentation

Download to read offline
Copyright © DeNA Co.,Ltd. All Rights Reserved.C++ビルド支援ツールqtpmGolang.tokyo #72017/7/3渋川よしきDeNA Co., Ltd.
*Copyright (C) DeNA Co.,Ltd. All Rights Reserved.社内GUIツール開発● GUIのツール作りたくなることありますよね?● マルチプラットフォーム(mac/win)の時に何を使うのか?● C++: Qt / GTK● C#: Xamarin, GTK#● #
*Copyright (C) DeNA Co.,Ltd. All Rights Reserved.社内GUIツール開発● GUIのツール作りたくなることありますよね?● マルチプラットフォーム(mac/win)の時に何を使うのか?● C++: Qt / GTK● C#: Xamarin, GTK#● #
*Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Qtが安定している● 歴史が長い(1990〜)し、安定している● コード品質、後方互換性(4系から5系でもほとんど修正不要)● OSネイティブのルック&フィール● メモリ消費量が今となっては激少ない(〜50MBとか)● C++は型もあるし、C++11便利だし、内製ツールの規模ならビルドも早い● WebKit/Chromiumベースのブラウザウィジェットもある● QML / Qt Quick Controlは試したかったが、今回は学習の時間とか下調べの時間とか、メリット、引き継ぎとか考えてやめた● Qtは宣言型のJSONテンプレート+JSを使って開発するQt上の動的開発環境で、モバイルを強く意識している● 情報が少ない。QMLは旧ASCII MWで1冊。Qt Quick Controlは薄い本しかない● 自分でやるにはいいけど・・・● Qt Quick Control 2になってだいぶいろんなUI部品が増えたがテーブルとか、ツリービューはなかった
*Copyright (C) DeNA Co.,Ltd. All Rights Reserved.C++でツールをさっと作るときの課題(1)● 今時のパッケージマネージャ完備の言語と比べるといろいろつらい● 良い感じの共通のパッケージマネージャ基盤がない● OSを限定すれば各OSのもろもろに頼るのはできるが・・・● そもそもライブラリごとにビルドシステムがばらばら● configureスクリプトやらCMakeやらSconsやらNinjaやらXCodeやらVisual Studioのソリューションファイルやら何やら● 前提となるフレームワークもばらばら● ちょっぴりGlibとか使っているコードとかあったら、必要なライブラリも全部あつめて来ないといけない● マルチプラットフォーム?なにそれ?なものも・・・● 結局、必要なライブラリを全部内包しちゃっているプロジェクトが多い● Googleプロダクツとかも・・・● Go言語ならgo get一発なのに・・・
*Copyright (C) DeNA Co.,Ltd. All Rights Reserved.C++でツールをさっと作るときの課題(2)● ビルドシステムがいろいろつらい● QtでクロスプラットフォームだとQMakeかCMakeぐらいしかない● QMakeはQt専用で、ライブラリがこの設定ファイルを内蔵している確率はゼロに近い● CMakeが最近のデファクトだけど、文法とかいろいろ難しい● Fizzbuzzとかズンドコきよしが書けるぐらい高度な言語● やりたいこと→どう書けばいいか、の逆引きの分かりやすい解説が少ない
*Copyright (C) DeNA Co.,Ltd. All Rights Reserved.既存のパッケージ管理ソリューション(2014年〜)● BiiCode● 死んだ● CPM● CMakeベース● clib● C言語のパッケージマネージャ● sbt● ヘッダーファイルだけの過激なソリューション● このツールを作り始めた後にできたもの● conan.io● このツールを作り始めた後にできたやつ● JFrogという会社が買収して、今のところ今後期待できそう● qpm● Qt用。QMakeベース● vcpkg● MS製。全レシピ内蔵の富豪的なやつ(ただしWindows用)
*Copyright (C) DeNA Co.,Ltd. All Rights Reserved.GoっぽいパッケージマネージャをGoで作ろう (2014年〜)● X getで必要なコードを持ってきて● X buildで設定ファイルレスでアプリケーションをビルドして● X testでユニットテストして● X vetでコードの品質チェックして● X fmtでフォーマットを修正して● ついでにWebAssemblyとかやりたかった(まだ実現してない)
*Copyright (C) DeNA Co.,Ltd. All Rights Reserved.つくった(github.com/qtpm)● qtpmという名前のツール● ファイル名のルールに従って集めてきてCMakeの設定ファイルを自動生成● ライブラリモードと、アプリケーションモード● テストコードやリソースファイル、アイコンなども● _windows.cpp、_darwin.cppみたいなやつも入れた● 最低限の設定ファイル● Toml形式● バージョンとか、必要な依存Qtモジュールとか、依存パッケージとか● とりあえずQt用のC++コードがビルドできるような機能が組込で● moc、ui、qrcといったQt用のプリプロセッサも実行● Qt使わないコードも使える● インストーラも自動生成● WindowsはWiX経由で.msi、macは.dmgファイル● 諸事情により(セキュリティソフトが殺してくるので).zipファイルを作る機能も
*Copyright (C) DeNA Co.,Ltd. All Rights Reserved.ツールの使い方の流れ● qtpm init appでアプリケーションの雛形作成● qtpm getで必要なライブラリを収集● qtpm buildでアプリケーションをビルド● macは標準のxcode command line toolsと、バイナリ配布のQtを利用● WindowsはVC++ Express 2013/2015 or MinGWと、バイナリ配布のQtを利用● インストール場所は自動探索● qtpm fmtでフォーマットを整える● clang-formatを利用。なるべくQt標準っぽい設定ファイルをデフォルトで利用するが・・・たまにフォーマット後にビルド通らなくなることが・・・● qtpm vetで文法チェック● clang-tidyを利用● qtpm testでテスト● CTest(ランナー)とQTest(フレームワーク)を利用● qtpm packでインストーラ作成
*Copyright (C) DeNA Co.,Ltd. All Rights Reserved.仕事はだいぶ楽になった● CMakeファイルベースの開発は徒手空拳でCMakeLists.txtと戦う必要がある● IDEはこのファイルを読み込んで初めてファイルをリストに出してくれる● Qt CreatorとCLionがサポートしている● コマンド一発でCMakeLists.txtが最新化されるのでファイル追加が楽● ビルドスクリプトの試行錯誤が激減● インストーラまで一括作成● Goで作ったので、各種タスク実行がWindows(MinGW, コマンドプロンプト)、macOS環境でもすべて同じように動く● パッケージは自分で追加しないといけない・・・● 今のところそこまでガンガン作っているわけではないので困ってない● モジュール化は進むので、コードは分かりやすくなっているはず・・・
*Copyright (C) DeNA Co.,Ltd. All Rights Reserved.補助ツールを作る時の退路を用意● 補助ツールのメンテがコストになってしまっては元も子もない● SPOFになってしまってもいけない● それが依存している何かがEOLになって使用不可能になるとか● 中間生成物として完動するCMakeLists.txtを生成する● 最悪、qtpmがなくても、このファイルさえあれば後工程が正しく動くようにしてあるqtpm pack設定ファイルを読むCMakeLists.txt生成CMake実行macdeployqtwindeployqt CPack実行
*Copyright (C) DeNA Co.,Ltd. All Rights Reserved.もしこれから作り直すならこうしたい● C/C++は主に超定番ライブラリと、それを使うユーザーライブラリで大きく2つに分けられる● zlibとかlibpngとか● 超定番ライブラリは高確率でOSにも入っていたり● 超定番ライブラリだけは特別扱いしてあげても良かったのでは● Microsoftのvcpkgはそうなっている。このコードをまるごと頂いてもよさそう● https://github.com/Microsoft/vcpkg● ユーザーパッケージとフラットに扱う仕組みじゃなくてもいい● クロスコンパイル● いろんな処理系全部入りのDockerイメージが最近ある
*Copyright (C) DeNA Co.,Ltd. All Rights Reserved.WebAssembly対応● WebAssemblyが今後普及するならパッケージマネージャが必要とされるはず!● ・・・と3年前に考えた● QtとともにWebAsmもサポートしたら面白そうだなと思っていた● 進捗● 処理系のダウンロード● Emscriptenの処理系を自動でダウンロードしてくる機能が入っていたりもするが、長らくEmscriptenのビルド済みバイナリが古いままだったので放置してた● 最近WebAsm対応のビルド済みバイナリがダウンロードできるようになったらしい● ビルド● 趣味で使おうと思ったぐらいでほとんどテストしてない・・・● そのうちまた興味が湧いたらやってみようかと
*Copyright (C) DeNA Co.,Ltd. All Rights Reserved.まとめ● C++は今時の言語と比べるともろもろ頑張る必要がある● ビルドツールいろいろ● パッケージマネージャのデファクトはなかった● Goを使ってGoっぽくC++ができるビルドツール兼パッケージマネージャ作った● CMakeベース● とりあえず便利に使ってます● 退路もきちんと用意してる● 作ってみての課題も見えた● 定番ライブラリのサポートをまるっとやりたかった● クロスコンパイルもやりたいよね・・・● WebAssembly対応も一応考えていた● Emscriptenの安定版がなかなか出ないのですっかり忘れてた

Recommended

PPTX
FINAL FANTASY Record Keeperを支えたGolang
PDF
NextGen Server/Client Architecture - gRPC + Unity + C#
PDF
【Unite Tokyo 2019】Understanding C# Struct All Things
PDF
GoでMinecraftっぽいの作る
PDF
UniRx - Reactive Extensions for Unity
PDF
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
PPTX
Chunked encoding を使った高速化の考察
PPTX
PDF
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
PPTX
今から始める、Windows 10&新.NETへの移行戦略
PDF
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
PDF
C++でCプリプロセッサを作ったり速くしたりしたお話
PDF
Goji とレイヤ化アーキテクチャ
PDF
QtとC++でGUIプログラミング
PPTX
Unityで使える C# 6.0~と .NET 4.6
PDF
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
PDF
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
PDF
The History of Reactive Extensions
PDF
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
PDF
Pythonで始めるWebアプリケーション開発
PDF
Groovy Bootcamp 2015 by JGGUG
PPTX
Modern .NET
PDF
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
PDF
A Framework for LightUp Applications of Grani
ODP
PySide/QtWebkitで楽々 slideshare Hack
PDF
CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話
PPTX
Deep Dive C# 6.0
PDF
PyCon JP 2014 plone terada
PDF
PyQtではじめるGUIプログラミング
PDF
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 hamanako

More Related Content

PPTX
FINAL FANTASY Record Keeperを支えたGolang
PDF
NextGen Server/Client Architecture - gRPC + Unity + C#
PDF
【Unite Tokyo 2019】Understanding C# Struct All Things
PDF
GoでMinecraftっぽいの作る
PDF
UniRx - Reactive Extensions for Unity
PDF
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
PPTX
Chunked encoding を使った高速化の考察
PPTX
FINAL FANTASY Record Keeperを支えたGolang
NextGen Server/Client Architecture - gRPC + Unity + C#
【Unite Tokyo 2019】Understanding C# Struct All Things
GoでMinecraftっぽいの作る
UniRx - Reactive Extensions for Unity
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Chunked encoding を使った高速化の考察

What's hot

PDF
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
PPTX
今から始める、Windows 10&新.NETへの移行戦略
PDF
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
PDF
C++でCプリプロセッサを作ったり速くしたりしたお話
PDF
Goji とレイヤ化アーキテクチャ
PDF
QtとC++でGUIプログラミング
PPTX
Unityで使える C# 6.0~と .NET 4.6
PDF
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
PDF
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
PDF
The History of Reactive Extensions
PDF
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
PDF
Pythonで始めるWebアプリケーション開発
PDF
Groovy Bootcamp 2015 by JGGUG
PPTX
Modern .NET
PDF
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
PDF
A Framework for LightUp Applications of Grani
ODP
PySide/QtWebkitで楽々 slideshare Hack
PDF
CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話
PPTX
Deep Dive C# 6.0
PDF
PyCon JP 2014 plone terada
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
今から始める、Windows 10&新.NETへの移行戦略
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
C++でCプリプロセッサを作ったり速くしたりしたお話
Goji とレイヤ化アーキテクチャ
QtとC++でGUIプログラミング
Unityで使える C# 6.0~と .NET 4.6
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
The History of Reactive Extensions
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Pythonで始めるWebアプリケーション開発
Groovy Bootcamp 2015 by JGGUG
Modern .NET
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
A Framework for LightUp Applications of Grani
PySide/QtWebkitで楽々 slideshare Hack
CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話
Deep Dive C# 6.0
PyCon JP 2014 plone terada

Similar to Golang tokyo #7 qtpm

PDF
PyQtではじめるGUIプログラミング
PDF
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 hamanako
PDF
it's Qt!
PDF
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 Nagoya
PDF
Qt5 の新機能 2012/12/15
PPTX
20130228 Goノススメ(BPStudy #66)
ODP
Qt名古屋勉強会へのお誘い(OSC名古屋2017LT)
PDF
関西Qt勉強会 ごーるでん 発表資料
PyQtではじめるGUIプログラミング
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 hamanako
it's Qt!
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 Nagoya
Qt5 の新機能 2012/12/15
20130228 Goノススメ(BPStudy #66)
Qt名古屋勉強会へのお誘い(OSC名古屋2017LT)
関西Qt勉強会 ごーるでん 発表資料

More from Yoshiki Shibukawa

PPTX
Kiroを使ってみた - そこから見える今どきの開発 - Kiro Meetup Japan #1
PPTX
JavaScript/TypeScript実力強化書 2章のアップデート Forkwell Library
PDF
多すぎるユニットテストは却ってよくない?私が実践しているテストコードのリファクタリング
PDF
技育祭2025秋 サボろうとする生成AIの傾向と対策 登壇資料(フューチャー渋川)
PPTX
アンラーニング
PDF
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
PPTX
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
PDF
Oktavia全文検索エンジン - SphinxCon JP 2014
PPTX
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
PDF
ITコンサルが改善するのはビジネスだけじゃない! サークル的活動で業界貢献 技育祭2024秋
PPTX
Go & multi platform GUI Trials and Errors
PDF
Expert JavaScript Programming
PDF
東京Node学園 今できる通信高速化にトライしてみた
PDF
Oktavia Search Engine - pyconjp2014
PDF
大規模JavaScript開発
PDF
Bitbucket&mercurial
PPTX
Excelの話
PDF
Xpjug基調lt2011
PDF
Pomodoro technique
PDF
JavaScriptゲーム制作勉強会
Kiroを使ってみた - そこから見える今どきの開発 - Kiro Meetup Japan #1
JavaScript/TypeScript実力強化書 2章のアップデート Forkwell Library
多すぎるユニットテストは却ってよくない?私が実践しているテストコードのリファクタリング
技育祭2025秋 サボろうとする生成AIの傾向と対策 登壇資料(フューチャー渋川)
アンラーニング
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
Oktavia全文検索エンジン - SphinxCon JP 2014
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
ITコンサルが改善するのはビジネスだけじゃない! サークル的活動で業界貢献 技育祭2024秋
Go & multi platform GUI Trials and Errors
Expert JavaScript Programming
東京Node学園 今できる通信高速化にトライしてみた
Oktavia Search Engine - pyconjp2014
大規模JavaScript開発
Bitbucket&mercurial
Excelの話
Xpjug基調lt2011
Pomodoro technique
JavaScriptゲーム制作勉強会

Golang tokyo #7 qtpm

  • 1.
    Copyright © DeNACo.,Ltd. All Rights Reserved.C++ビルド支援ツールqtpmGolang.tokyo #72017/7/3渋川よしきDeNA Co., Ltd.
  • 2.
    *Copyright (C) DeNACo.,Ltd. All Rights Reserved.社内GUIツール開発● GUIのツール作りたくなることありますよね?● マルチプラットフォーム(mac/win)の時に何を使うのか?● C++: Qt / GTK● C#: Xamarin, GTK#● #"https://www.slideshare.net/slideshow/golang-tokyo-7-qtpm/77460980#3">*Copyright (C) DeNACo.,Ltd. All Rights Reserved.社内GUIツール開発● GUIのツール作りたくなることありますよね?● マルチプラットフォーム(mac/win)の時に何を使うのか?● C++: Qt / GTK● C#: Xamarin, GTK#● #"https://www.slideshare.net/slideshow/golang-tokyo-7-qtpm/77460980#4">*Copyright (C) DeNACo.,Ltd. All Rights Reserved.Qtが安定している● 歴史が長い(1990〜)し、安定している● コード品質、後方互換性(4系から5系でもほとんど修正不要)● OSネイティブのルック&フィール● メモリ消費量が今となっては激少ない(〜50MBとか)● C++は型もあるし、C++11便利だし、内製ツールの規模ならビルドも早い● WebKit/Chromiumベースのブラウザウィジェットもある● QML / Qt Quick Controlは試したかったが、今回は学習の時間とか下調べの時間とか、メリット、引き継ぎとか考えてやめた● Qtは宣言型のJSONテンプレート+JSを使って開発するQt上の動的開発環境で、モバイルを強く意識している● 情報が少ない。QMLは旧ASCII MWで1冊。Qt Quick Controlは薄い本しかない● 自分でやるにはいいけど・・・● Qt Quick Control 2になってだいぶいろんなUI部品が増えたがテーブルとか、ツリービューはなかった
  • 5.
    *Copyright (C) DeNACo.,Ltd. All Rights Reserved.C++でツールをさっと作るときの課題(1)● 今時のパッケージマネージャ完備の言語と比べるといろいろつらい● 良い感じの共通のパッケージマネージャ基盤がない● OSを限定すれば各OSのもろもろに頼るのはできるが・・・● そもそもライブラリごとにビルドシステムがばらばら● configureスクリプトやらCMakeやらSconsやらNinjaやらXCodeやらVisual Studioのソリューションファイルやら何やら● 前提となるフレームワークもばらばら● ちょっぴりGlibとか使っているコードとかあったら、必要なライブラリも全部あつめて来ないといけない● マルチプラットフォーム?なにそれ?なものも・・・● 結局、必要なライブラリを全部内包しちゃっているプロジェクトが多い● Googleプロダクツとかも・・・● Go言語ならgo get一発なのに・・・
  • 6.
    *Copyright (C) DeNACo.,Ltd. All Rights Reserved.C++でツールをさっと作るときの課題(2)● ビルドシステムがいろいろつらい● QtでクロスプラットフォームだとQMakeかCMakeぐらいしかない● QMakeはQt専用で、ライブラリがこの設定ファイルを内蔵している確率はゼロに近い● CMakeが最近のデファクトだけど、文法とかいろいろ難しい● Fizzbuzzとかズンドコきよしが書けるぐらい高度な言語● やりたいこと→どう書けばいいか、の逆引きの分かりやすい解説が少ない
  • 7.
    *Copyright (C) DeNACo.,Ltd. All Rights Reserved.既存のパッケージ管理ソリューション(2014年〜)● BiiCode● 死んだ● CPM● CMakeベース● clib● C言語のパッケージマネージャ● sbt● ヘッダーファイルだけの過激なソリューション● このツールを作り始めた後にできたもの● conan.io● このツールを作り始めた後にできたやつ● JFrogという会社が買収して、今のところ今後期待できそう● qpm● Qt用。QMakeベース● vcpkg● MS製。全レシピ内蔵の富豪的なやつ(ただしWindows用)
  • 8.
    *Copyright (C) DeNACo.,Ltd. All Rights Reserved.GoっぽいパッケージマネージャをGoで作ろう (2014年〜)● X getで必要なコードを持ってきて● X buildで設定ファイルレスでアプリケーションをビルドして● X testでユニットテストして● X vetでコードの品質チェックして● X fmtでフォーマットを修正して● ついでにWebAssemblyとかやりたかった(まだ実現してない)
  • 9.
    *Copyright (C) DeNACo.,Ltd. All Rights Reserved.つくった(github.com/qtpm)● qtpmという名前のツール● ファイル名のルールに従って集めてきてCMakeの設定ファイルを自動生成● ライブラリモードと、アプリケーションモード● テストコードやリソースファイル、アイコンなども● _windows.cpp、_darwin.cppみたいなやつも入れた● 最低限の設定ファイル● Toml形式● バージョンとか、必要な依存Qtモジュールとか、依存パッケージとか● とりあえずQt用のC++コードがビルドできるような機能が組込で● moc、ui、qrcといったQt用のプリプロセッサも実行● Qt使わないコードも使える● インストーラも自動生成● WindowsはWiX経由で.msi、macは.dmgファイル● 諸事情により(セキュリティソフトが殺してくるので).zipファイルを作る機能も
  • 10.
    *Copyright (C) DeNACo.,Ltd. All Rights Reserved.ツールの使い方の流れ● qtpm init appでアプリケーションの雛形作成● qtpm getで必要なライブラリを収集● qtpm buildでアプリケーションをビルド● macは標準のxcode command line toolsと、バイナリ配布のQtを利用● WindowsはVC++ Express 2013/2015 or MinGWと、バイナリ配布のQtを利用● インストール場所は自動探索● qtpm fmtでフォーマットを整える● clang-formatを利用。なるべくQt標準っぽい設定ファイルをデフォルトで利用するが・・・たまにフォーマット後にビルド通らなくなることが・・・● qtpm vetで文法チェック● clang-tidyを利用● qtpm testでテスト● CTest(ランナー)とQTest(フレームワーク)を利用● qtpm packでインストーラ作成
  • 11.
    *Copyright (C) DeNACo.,Ltd. All Rights Reserved.仕事はだいぶ楽になった● CMakeファイルベースの開発は徒手空拳でCMakeLists.txtと戦う必要がある● IDEはこのファイルを読み込んで初めてファイルをリストに出してくれる● Qt CreatorとCLionがサポートしている● コマンド一発でCMakeLists.txtが最新化されるのでファイル追加が楽● ビルドスクリプトの試行錯誤が激減● インストーラまで一括作成● Goで作ったので、各種タスク実行がWindows(MinGW, コマンドプロンプト)、macOS環境でもすべて同じように動く● パッケージは自分で追加しないといけない・・・● 今のところそこまでガンガン作っているわけではないので困ってない● モジュール化は進むので、コードは分かりやすくなっているはず・・・
  • 12.
    *Copyright (C) DeNACo.,Ltd. All Rights Reserved.補助ツールを作る時の退路を用意● 補助ツールのメンテがコストになってしまっては元も子もない● SPOFになってしまってもいけない● それが依存している何かがEOLになって使用不可能になるとか● 中間生成物として完動するCMakeLists.txtを生成する● 最悪、qtpmがなくても、このファイルさえあれば後工程が正しく動くようにしてあるqtpm pack設定ファイルを読むCMakeLists.txt生成CMake実行macdeployqtwindeployqt CPack実行
  • 13.
    *Copyright (C) DeNACo.,Ltd. All Rights Reserved.もしこれから作り直すならこうしたい● C/C++は主に超定番ライブラリと、それを使うユーザーライブラリで大きく2つに分けられる● zlibとかlibpngとか● 超定番ライブラリは高確率でOSにも入っていたり● 超定番ライブラリだけは特別扱いしてあげても良かったのでは● Microsoftのvcpkgはそうなっている。このコードをまるごと頂いてもよさそう● https://github.com/Microsoft/vcpkg● ユーザーパッケージとフラットに扱う仕組みじゃなくてもいい● クロスコンパイル● いろんな処理系全部入りのDockerイメージが最近ある
  • 14.
    *Copyright (C) DeNACo.,Ltd. All Rights Reserved.WebAssembly対応● WebAssemblyが今後普及するならパッケージマネージャが必要とされるはず!● ・・・と3年前に考えた● QtとともにWebAsmもサポートしたら面白そうだなと思っていた● 進捗● 処理系のダウンロード● Emscriptenの処理系を自動でダウンロードしてくる機能が入っていたりもするが、長らくEmscriptenのビルド済みバイナリが古いままだったので放置してた● 最近WebAsm対応のビルド済みバイナリがダウンロードできるようになったらしい● ビルド● 趣味で使おうと思ったぐらいでほとんどテストしてない・・・● そのうちまた興味が湧いたらやってみようかと
  • 15.
    *Copyright (C) DeNACo.,Ltd. All Rights Reserved.まとめ● C++は今時の言語と比べるともろもろ頑張る必要がある● ビルドツールいろいろ● パッケージマネージャのデファクトはなかった● Goを使ってGoっぽくC++ができるビルドツール兼パッケージマネージャ作った● CMakeベース● とりあえず便利に使ってます● 退路もきちんと用意してる● 作ってみての課題も見えた● 定番ライブラリのサポートをまるっとやりたかった● クロスコンパイルもやりたいよね・・・● WebAssembly対応も一応考えていた● Emscriptenの安定版がなかなか出ないのですっかり忘れてた

[8]ページ先頭

©2009-2025 Movatter.jp