2017-07-21 1 views
0

まずPKG_CONFIG_PATHにpackage.pc探し違いは

pkg_search_module(some_name REQURED package) 

.PC拡張子で終わるパッケージの設定ファイルを探します

pkg_search_module()がある

次にfind_package()があります。

さらに3つのバージョンがあります。

list(APPEND CMAKE_PREFIX_PATH "/path/) 
find_package(Package REQUIRED) 

すべてと

set(Package_DIR "/path/") 
find_package(Package REQUIRED) 

およびその他の

find_package(Package HINTS "/path" REQUIRED) 

と第三との一つは、PackageConfig.cmakeを探すか、またはパッケージconfig.cmake

、その後FindPackageがあります.cmake。

それらのすべてのライブラリーを返すには、含まれ、cmakeの中でコマンド

  1. がFindPackage.cmake探し...変数などを発見しましたか?

  2. 私はコンセプトを正しく理解しましたか?

  3. なぜこの複雑さですか?

+0

重複に格納されていcorrespeonding:https://stackoverflow.com/questions/25959972/what-is-the-difference-between-find-package-and- pkg-search-moduleです。 pkg-configは他の2つのオプションのどれかと同じように移植性がありません。また、 '' find_package() ''の設定モードは、CMake対応のプロジェクトであり、FindModule(非CMakeプロジェクト用の 'find_package()'のモジュールモード)やpkg-config(これは多くのプラットフォームに存在します)。 – utopia

+0

それは重複していません。私の質問は、FindPackage.cmakeファイルの重要性が分かります。 find_packageはPackageConfig.cmakeを探します。 – infoclogged

答えて

0

私はその間にLinuxユーザーに質問しています。他の誰かが後でもっと光を投げるかもしれない。

find_packageには、ライブラリとディレクトリを検索する2つの方法があります。デフォルトはFind < Package> .cmakeです。見つからなければ、検索は<パッケージ> Config.cmakeに戻ります。

デフォルトの検索位置が

<prefix>/(lib/<arch>|lib|share)/cmake/<name>*\/   
<prefix>/(lib/<arch>|lib|share)/<name>*\/     
<prefix>/(lib/<arch>|lib|share)/<name>*\/(cmake|CMake)/ 

<接頭辞である> CMAKE_PREFIX_PATHある - パスは、パッケージcmakesが上記デフォルトのパスにない場合に設定します。デフォルト<プレフィックス>は、パスがCMAKE_SYSTEM_PREFIX_PATH

MODULE

<パッケージ> .cmakeを探すです。

set (<Package>_ROOT /path/) 
find_package(<Package> COMPONENTS lib1 lib2 REQUIRED) 
find_package(<Package>) 

CONFIG

<パッケージ> Configを。cmakeの

set(CMAKE_PREFIX_PATH /path/) 
find_package(<Package> CONFIG REQUIRED) 
find_package(<Package> REQUIRED) 

変数が

<Package>_FOUND; <Package>_INCLUDE_DIRS; <Package>_LIBRARY_DIR, <Package>_LIBRARIES