2016-10-25 1 views
2

通常find_package(foo)find_package()がCMakeでどのように動作するかについてコンセンサスがありますか?

${FOO_FOUND} 
${FOO_INCLUDE_DIRS} 
${FOO_LIBRARIES} 

を定義しますしかし、唯一の${FOO_FOUND}はCMakeのドキュメントに記載されています。そして、いくつかのライブラリはこの規則に従わない。 Glogなど。

find_package()の2つのモードがあります。 1つはモジュールモードで、FindFoo.cmakeを使用します。もう一つは、コンフィグモードで、foo-config.cmakeを使用しています。

foo-config.cmakeはfooの管理者によって提供され、FindFoo.cmakeは他人が書いた可能性があります。私はそうですか?開発者の間で変数を定義する方法のコンセンサスはありますか?

"インポートされたターゲット"は、CMake 2.6以降の新機能です。これは、libを見つけるためのより良い方法を提供します。したがって、${FOO_INCLUDE_DIRS}${FOO_LIBRARIES}の使用は従来の方法と見なされるべきですか?あるいは、それらが互換性のために鍵を握るべきですか?これら三つの変数を定義することをお勧め私が見つけた

二つのリンク:設定ファイルに関して

https://cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file https://coderwall.com/p/qej45g/use-cmake-enabled-libraries-in-your-cmake-project-iii

+0

ヒント:旧式のWikiページにリンクしています。 ['cmake-packages'](https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html)はあなたが参照できるものです。多かれ少なかれコンセンサスを説明している。 [@ruslo](http://stackoverflow.com/users/2288008/ruslo)の[this](https://github.com/forexample/package-example)のようないくつかのチュートリアルの例があります。 – Florian

答えて

0

をし、マクロを見つけ、変数が設定されているのない本当に強制スキーマはありません。一般に、どの著者がどの変数を定義し、どのように呼び出すかを決定することができます。提供されたfind marcosの場合、これらの変数は通常、cmakeのマニュアルに書かれています。 boostについては。

私が長年にわたって見てきた共通の落とし穴の1つの例は、*_INCLUDE_DIRSを定義するパッケージと、*_INCLUDE_DIRという単数型を定義するパッケージです。

私の考えでは、提供されている検索マクロをcmakeのドキュメントで参照し、そこからの因子合意を得ることが最善の方法です。

+0

CMakeのImportedターゲットは本当に強力なツールだと分かりました。 [* _INCLUDE_DIRS'または* _LIBRARIES'を定義する必要はありません。インクルードディレクトリとC++プリプロセッサは、[target_link_libraries()](https://cmake.org/cmake/help)を実行すると自動的にターゲットに追加されます。 /v3.0/command/target_link_libraries.html)をインポートします。 – flm8620

+0

問題は、古いパッケージとの互換性です。これは本当に混乱しています。 – flm8620

関連する問題