2017-09-02 5 views
2

C/C++プロジェクトの実行可能ファイルとライブラリをLinux、OSX、Windowsに配布したい。好ましいCPackジェネレータは何ですか?つまり、ほとんどのユーザにとって利用可能なCPackジェネレータは何ですか? Windows上にはNSISしかないようですが、LinuxやOSXにはいくつかの選択肢があります。 ところで、ソース配布も生成されるので、理論的には、すべてのプラットフォームのユーザーがコードをコンパイルできなければなりませんが、便宜上、コンパイル済みバイナリを提供したいと考えています。CMake/CPack:異なるプラットフォーム用の好ましいパッケージジェネレータ

+0

だから、Windowsユーザーはそれに慣れていますが、Linuxでは通常はすべてのライブラリを実行可能ファイルでパッケージ化しないでください。だから、Windowsスタイルのインストーラを持つことは、Linuxの世界ではまれなことです。あなたのディストリビューションのリポジトリに*ディストリビューションパッケージ*としてパッケージ化されているので、Debianスタイルの 'apt-get install matts_amazing_software'やFedoraスタイルの' dnf install matts_a ... 'やGentooスタイル) 'emerge matts_a ...'。 Windows上の.msiインストーラのようなパッケージを考えてみてください。それらはdistrosがすでに持っているライブラリにリンクされているだけです。 –

+0

...そうすれば、あなたはウィンドウのように400万の異なる 'libdepency.dll'に終わることはありません。したがって、平均的なLinuxユーザーにとっては、ソフトウェアのインストールは集中化されており、バイナリインストーラーを手動でダウンロードすることはありません。これの欠点はパッケージが各ディストリビューションごとに異なる必要があることです。ディストリビューションごとに異なるライブラリセットが付いてくるからです。あなたが**本当に**欲しいのであれば、* flatpack *を調べてみてください。しかし、私は個人的には、Linuxのソフトウェアエコシステムを分割し、互換性がなく、Windowsのように壊してしまうという考えを嫌います。 –

答えて

3

各プラットフォームごとに複数の共通プラクティスがあります。どちらがあなたに最適なのかは、さまざまな要因に左右されますが、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つ目の代替パッケージ形式として便利です。特に、システムに管理者権限を持たず、便利な場所に簡単に解凍したいユーザーにとって便利な機能です。
+1

Windowsの場合、NSISはWIXよりもはるかに使いやすく、移植性も高いです。したがって、それは小売り/普通のユーザーによく使用されます。 MSIの先進的なインストール、柔軟性、Windowsソフトウェアサービスとの統合により、WIXは企業ソフトウェアの需要が増えているか、または義務化されています。 – utopia

関連する問題