2016-10-17 18 views
-3

私はライブラリを構築するためになぜcmakeが必要なのですか?私の質問が愚かであれば申し訳ありませんが、私はWidnowsでいくつかのライブラリを使用する必要があります。そして、これまでにライブラリを選んだら、ビルドしたり、cmakeでコンパイルする必要があります。なぜ私は自分のプロジェクトに必要なものを「パス」に#含めるだけで、プロジェクトと同時にコンパイル/ビルドすることはできないのですか?なぜcmakeが必要ですか?

また、時々私はRuby、Perl、Pythonのすべてを特定のバージョンにインストールする必要があったので、cmakeはライブラリをビルドできます...なぜそれらのプログラムが必要なのですか?私のプロジェクトも? (具体的には、ライブラリをビルドした後にこれらのプログラムをアンインストールできますか?)

+4

* "私は自分のプロジェクトに必要なものを#パスに"組み込むことができますか?プロジェクトと同時にビルドすることはできますか? "どのパーツがライブラリを構成しているのか、それがどのようにプログラムに組み込まれているのかを理解しています。ここでは、基本的なことについて話を進める必要があります。とにかく、ライブラリが[CMake](http://cmake.org)を必要とする場合(Web検索を使用することを恐れてはいけません)、ビルドシステムを管理するために選択したツールなので、そうします。 – IInspectable

答えて

1

異なるプラットフォーム上でC++を構築するのは現在混乱しています。

いくつかの異なるビルドシステムがあり、標準的な方法はありません。ビジュアルスタジオソリューションを提供するだけで、LinuxやMacでのコンパイルに役立つことはありません。

linuxまたはmac用のmakefileを追加する場合は、ソリューションとmakefileの間で設定を繰り返す必要があります。メンテナンスのオーバーヘッドが大きくなる可能性があります。また、makefileはそこにある新しいものに比べて実際には良いビルドツールではありません。

あなたがCMakeライブラリだけを持っているのは、ほとんど偶然です。 CMakeは現在人気のある選択だが

ビルドを統一するためのソリューションがいくつかあります。 CMakeは特別な方法で構築ツールです。メークファイルを作成しビルドすることもできますが、必要に応じてcmakeにビジュアルスタジオソリューションを作成するよう指示することもできます。

外部プログラムでも同じことが起こります。それらは、使用するライブラリのメンテナーの選択であり、コード生成のような標準はありません。

CMakeは、(今後のビジュアルスタジオ2015は、cmakeサポートを統合していますが)クロスプラットフォームであるこれらのビルドシステムの傾向はますますこの方向に向かっています。

少数のライブラリはヘッダのみとコンパイルする必要がされています。あなたの質問に


は、なぜあなたはヘッダのみを含めることはできません。どちらの場合でも、プリコンパイルされたlibs/dllを取得し、ヘッダー+リンカーパスを追加するだけです。これはLinuxの方が簡単です。-devのパッケージには、プレビルドライブラリをインストールするだけで、パッケージマネージャを使用してヘッダが作成できるからです。 Windowsにはそのようなことはネイティブにありません。

または、ライブラリで使用するビルドツールを使用して自分でビルドする必要があります。

+1

*「Windowsにはネイティブではありません」* *ネイティブかどうかにかかわらず、Visual Studioは[NuGet](https://www.nuget.org/)を同じ目的で使用しているため、依存関係の展開も同様に簡単です。それは*「Microsoft開発プラットフォームのパッケージマネージャー」*です。 NuGetについてのすばらしい点:** ** ** ** ** ** ** ** **から** **パッケージを引っ張ってくる唯一の** **パッケージマネージャです。 * "NuGetのトラブルシューティング" *を探すためのリソースは、Linuxのパッケージマネージャーよりもはるかに少ないでしょう。 – IInspectable

+1

私はあなたの要約が好きです。ちょうどいくつかのリンクを追加したかっただけです:[Visual StudioのCMakeのサポート](https://blogs.msdn.microsoft.com/vcblog/2016/10/05/cmake-support-in-visual-studio/ )、[オープンソースアプリケーションのアーキテクチャ:CMake](http://aosabook.org/en/cmake.html)、[CMakeについて](https://cmake.org/overview/)を参照してください。 – Florian

+0

NuGetの言及のために@IInspectableありがとう。私はまだそれを使用していないので、私はこのトピックのために何かを追加することができませんでした。 – Hayt

関連する問題