C/C++プロジェクトの実行可能ファイルとライブラリをLinux、OSX、Windowsに配布したい。好ましいCPackジェネレータは何ですか?つまり、ほとんどのユーザにとって利用可能なCPackジェネレータは何ですか? Windows上にはNSISしかないようですが、LinuxやOSXにはいくつかの選択肢があります。 ところで、ソース配布も生成されるので、理論的には、すべてのプラットフォームのユーザーがコードをコンパイルできなければなりませんが、便宜上、コンパイル済みバイナリを提供したいと考えています。CMake/CPack:異なるプラットフォーム用の好ましいパッケージジェネレータ
答えて
各プラットフォームごとに複数の共通プラクティスがあります。どちらがあなたに最適なのかは、さまざまな要因に左右されますが、CMake/CPackが直接サポートしているより一般的なフォーマットの中から選択することは、少なくとも以下の点で役立ちます。私はあなたがCMakeを介してCPackを使用していると仮定しています(CPack module経由、おそらくCPackComponent moduleを使用しているパッケージコンポーネントで)。
のWindows:
- NSIS package generatorは、平均的なユーザーが使用することにも慣れている実行ファイルのインストーラを作成します。これらはコンポーネントベースのインストールをサポートしているため、オプションのコンポーネントとしてソースを提供できます。このパッケージジェネレータに対するCMakeのサポートはかなり成熟していますが、近頃はあまり好まれない方法になっているかもしれません。
- WIX package generatorはMSIインストーラを生成します。これに対するサポートは新しく、機能の開発などの面でより積極的であると思われます。コンポーネントベースのインストールもサポートしており、NSISよりも好ましいフォーマットになっているようです。
マック
Mac用から選択するオプションの数が、その一つは、あなたがパッケージ化したいのかに依存して最も適切であるがあります。単一のアプリケーションバンドルを提供したいだけの場合は、DMG package generator(DragNDropジェネレータとも呼ばれます)は、おそらくあなたが望むものです。ユーザーはこれらについてよく知っており、使いやすいです。 Bundle generatorは避けてください。より古く、サポート対象が限定されているため、代わりにDMGジェネレータを優先する必要があります。
複数のバンドルを含むパッケージの場合、DMGジェネレータは依然として適切ですが、適切なインストーラが適切かもしれません。近年まで、PackageMaker generatorはそのためのgo-toジェネレータでしたが、ProductBuild generator(バージョン3.7以降のCMakeによってサポートされています)によって置き換えられました。 DebianベースのシステムのためDEBフォーマットが(DEB generatorを使用)が好ましい一方
のLinuxのRedHatベースのシステムで
は、RPMは、通常選択のパッケージ形式(RPM generatorを使用)です。 Debianベースのシステムは、エイリアンのようなツールを使ってRPMをサポートすることができますが、ユーザーはほとんど常にネイティブのDEBフォーマットを好みます。両方を提供できれば、両方のキャンプを幸せに保つことができますが、バイナリ互換性に注意する必要があります。シンプルなパッケージは、すべての主要なLinuxディストリビューション(Debianベースのものも含む)で動作する単一のRPMを生成するためにLSB (Linux Standards Base)に対してビルドすることができましたが、LSBは最近の開発に本当に対応しておらず、機能の完全なセット最も複雑なアプリケーション(または提供されたパッケージのバージョンが古すぎる)。しかし、LSBは、あなたが構築したパッケージが様々なLinuxディストリビューションでシンボルが欠けているかどうかを評価するのに、app checkerのような非常に有用なツールを提供しています。
Linuxの場合は、パッケージをLinuxディストリビューション自体に含めるかどうか、またはユーザーがディストリビューションのパッケージシステム外でパッケージをダウンロードしてインストールするかどうかを区別する必要があります。大規模な独立した商用ソフトウェア製品は、関連ライブラリなどを含むスタンドアロンパッケージとして配布され、デフォルトで/opt
の下にインストールされる傾向があります(LSBおよびFilesystem Hierarchy Standard - FHS(PDF)によって提唱されたガイドラインに従う場合)。理想的には、ディストリビューション保守担当者がパッケージの方法をディストリビューションの要件に適合させるために、パッケージを再配置可能にするのが理想的です。
RPMとDEBはどちらもソースパッケージをある程度サポートしています。
クロスプラットフォーム
- IFW package generatorは似た顔をしているし、すべてのプラットフォームで感じるインストーラを生成する方法としていくつかによって支持されます。また、ダウンロード可能なコンポーネントのような機能のサポートを提供する点でも進歩的です。使いやすいグラフィカルインストーラをすべてのプラットフォームで使用することが重要な場合は、おそらくこれがあなたが探しているものです。
- Archive package generatorは、ZIP、tarballs、7zなどのアーカイブをサポートしています。これらは、ファイルをまとめて1つのアーカイブにまとめる非常に基本的なフォーマットです。これらには、デスクトップ統合、インストール前/インストール後、アンインストールなどの便利な機能はありませんが、上記の2つ目の代替パッケージ形式として便利です。特に、システムに管理者権限を持たず、便利な場所に簡単に解凍したいユーザーにとって便利な機能です。
Windowsの場合、NSISはWIXよりもはるかに使いやすく、移植性も高いです。したがって、それは小売り/普通のユーザーによく使用されます。 MSIの先進的なインストール、柔軟性、Windowsソフトウェアサービスとの統合により、WIXは企業ソフトウェアの需要が増えているか、または義務化されています。 – utopia
- 1. Ionic:異なるプラットフォーム用の異なるプロバイダ
- 2. プラットフォーム上の異なるグリッドサイズ
- 3. 異なるプラットフォームではビルドサイズが異なります
- 4. テキストは、私は、異なるプラットフォーム間でのテキストのレンダリングに矛盾を見てい異なるaccrossプラットフォーム
- 5. 異なるプラットフォームの国名をエンコードする正しいメカニズム
- 6. 異なるプラットフォーム上のXULのバイナリファイル
- 7. 速度の異なるプラットフォーム上のストリーミングデスクトップ
- 8. 異なるプラットフォームのチャットベースアプリケーションのE2Eテスト
- 9. 異なるプラットフォームのリポジトリ構造
- 10. 異なるオペレーティングシステムとプラットフォームの検出
- 11. 異なる.NETプラットフォーム間のSignalR通信
- 12. 異なるプラットフォーム用のLinuxでのC/C++ソースコードのコンパイル
- 13. vr - 異なるプラットフォームをターゲットにする
- 14. LIBGDXフォントが異なるプラットフォームで異なる位置
- 15. 異なるプラットフォーム用のネイティブライブラリを持つJavaプロジェクト
- 16. Java暗号APIと異なるプラットフォーム
- 17. ShareKit iOS - プラットフォームごとに異なるコンテンツ
- 18. 異なるプラットフォーム用に異なるバージョンのgemをロードするためにbundlerを使用する
- 19. 異なるプラットフォーム間で同じGoogle APIキーを使用
- 20. Java:プラットフォームによって異なるプラットフォーム上のデフォルトの文字セットですか?
- 21. 電子メールテンプレートが異なるプラットフォームで正しく表示されない
- 22. ホームページ上に複数の好きなボタンがあります。異なるサブページが好きです。
- 23. 好きな人、好きな人、お互いの好きな人を検索しますか?
- 24. gRPCを使用したgolangプロトコルバッファをクロスコンパイルして、異なるOSプラットフォームで使用できますか?
- 25. Google MapsジオコーディングAPIが異なるプラットフォームで異なる結果を返す
- 26. 異なるテーブル/列で好きな順番を並べる
- 27. Unity3dのドローコール数はプラットフォームによって異なります
- 28. 異なるプラットフォーム用のCモジュールを含むPythonアプリケーションを配布する
- 29. 異なるプラットフォームのUIを調整する
- 30. expressjsのAPIで異なるプラットフォームを特定する方法
だから、Windowsユーザーはそれに慣れていますが、Linuxでは通常はすべてのライブラリを実行可能ファイルでパッケージ化しないでください。だから、Windowsスタイルのインストーラを持つことは、Linuxの世界ではまれなことです。あなたのディストリビューションのリポジトリに*ディストリビューションパッケージ*としてパッケージ化されているので、Debianスタイルの 'apt-get install matts_amazing_software'やFedoraスタイルの' dnf install matts_a ... 'やGentooスタイル) 'emerge matts_a ...'。 Windows上の.msiインストーラのようなパッケージを考えてみてください。それらはdistrosがすでに持っているライブラリにリンクされているだけです。 –
...そうすれば、あなたはウィンドウのように400万の異なる 'libdepency.dll'に終わることはありません。したがって、平均的なLinuxユーザーにとっては、ソフトウェアのインストールは集中化されており、バイナリインストーラーを手動でダウンロードすることはありません。これの欠点はパッケージが各ディストリビューションごとに異なる必要があることです。ディストリビューションごとに異なるライブラリセットが付いてくるからです。あなたが**本当に**欲しいのであれば、* flatpack *を調べてみてください。しかし、私は個人的には、Linuxのソフトウェアエコシステムを分割し、互換性がなく、Windowsのように壊してしまうという考えを嫌います。 –