web-dev-qa-db-ja.com

最小としてどのCMakeバージョン?

「cmake_minimum_required」機能を使用して、CMakeの最小バージョンを定義したい。一部のプロジェクトは最小バージョン2.8を設定し、他のプロジェクトは3.0または3.2を設定しているのを見てきました。このトピックについてのあなたの意見やベストプラクティスを学びたいと思います。

18
mustafagonul

cmake_minimum_required()関数は、現在のホストにインストールされているものよりも新しいバージョンのCMakeを想定している_CMakeLists.txt_による不可解なエラーメッセージを回避するために使用されます。

例として、早期に失敗し、明確なメッセージが表示されます...

_CMake 3.2 or higher is required. You are running version 2.8.12.2
_

...後で(はるかに)より不可解なものよりも優先されます...

_In file included from /home/foouser/src/testprj/string.cpp:1:0:
/home/foouser/src/testprj/string.hpp:94:29: error: ‘std::is_same’ has not been declared
_

...この例では、古いバージョンのCMakeがset( CMAKE_CXX_STANDARD 11 )をサポートしていないからです。きっと同意することでしょう。


理想的な設定は次のとおりです。

  1. スクリプトに必要なすべての機能を備えた最も古いバージョン。

古いバージョンを実行しているユーザーやスクリプトとの最大の互換性。ただし、どのバージョンを正確にテストする必要があります最初に構成をサポートしたのはこのためです。したがって、通常は次のようになります。

  1. スクリプトに必要なすべての機能を備えた、テストした最も古いバージョン。

ほとんどのプロジェクトではおそらくそれで十分です。そして、あなたがプロジェクトで実際に作業しているのがあなただけで、CMakeの互換性のテストがreally少ない場合、おそらく次のようになります。

  1. 現在使用しているバージョン。

この後者のアプローチには、他の誰かがプロジェクトをコンパイルしようとすると、深刻な欠点があります。かなりの数の人々がすべての最新バージョンを使用していない。特にLinuxでは、デフォルトではパッケージマネージャーから提供されたものを使用します。たとえば、Ubuntu wilyは現在バージョン3.2.2です-youより新しいバージョンがある可能性がありますが、need後のバージョン、あなたはそれをrequireすべきではありません(それは人々ができないことを意味するので)最初に新しいバージョンのCMakeを手動でインストールせずにプロジェクトをビルドします)。

あなたがすべきことないしていることは...

  • 非常に古いバージョンが必要ですが、実際にはその古いバージョン(NO!)に対してtestingではありません。

理由は明白であるはずです-物事がうまくいかなかった理由についてのヒントをユーザーが得ることなく、ビルドが失敗する可能性があります。

21
DevSolar