2017-06-11 29 views
2

私はopencvをローカルにビルドし、ローカルディレクトリにインストールしました(システムのデフォルトではありません)。 opencv.pcは、このローカルフォルダ内のpkgconfigフォルダの下にあります。自分のプログラムからopencvファイルをリンクして取り込みたいので、このopencv.pcをcmakeからどのように見つけることができますか?cmakeでPKG_CONFIG_PATHを設定しました

pkg_search_module(<PREFIX> [REQUIRED] [QUIET] <MODULE> [<MODULE>]*) 

は、私は特定のパス(find_packageとHINTSに似())とではない、システムのデフォルトを使用するようにコマンドを強制することが可能な任意のパラメータを持っていません。

そこで、基本的.cmake作品:

find_package(OpenCV REQUIRED HINTS "my/path/to/share/OpenCVConfig.cmake") 

をしかし、私は私の/パス/に/ pkgconfig」の下にありますopencv.pcを使用したい(

答えて

1

opencv.pcあなたがしてPKG_CONFIG_PATHを設定することができますCMakeのライン:

set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/my/path/to/pkgconfig") 

私はこのfile

でこの回避策をしました

は興味深いことに、それはCMakeの3.1は、いくつかのCMakeの変数を参照してPKG_CONFIG_PATHを拡張しているようだ:https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3df51470

+0

。どのようにモジュールを探していますか? – infoclogged

+0

実際には、クロスコンパイルをサポートするために作成した共通ファイルです。私は '' CMakeLists.txt'の先頭に 'find_package'を使いました。 [here](https://github.com/labapart/gattlib/blob/master/CMakeLists.txt#L30)を参照してください – OlivierM

1

@OlivierMからいくつかの研究やヒントを行った後、私は答えを見つけました。ここで

は手順は次のとおりです。PKG_CONFIG_PATHが設定されていない場合 、そしてCMAKE_PREFIX_PATHは.PCファイルにpkgconfigを使用するには、$

set(CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/libs/opencv-install/lib/pkgconfig") 

方法を見つけるために設定することができます。 PKG_CONFIG_PATHがすでに設定されている場合、ENVを使用して設定されます。

set(ENV{PKG_CONFIG_PATH} "${CMAKE_SOURCE_DIR}/libs/opencv-install/lib/pkgconfig") 

find_package(PkgConfig REQUIRED) 
pkg_search_module(PKG_OPENCV REQUIRED opencv) # this looks for opencv.pc file 

PKG_OPENCV変数は、自由に名前を付けることができますので、予めご了承ください。それが何であれ、接頭辞として使用されます。たとえば、ABCDという名前の場合、インクルードディレクトリはABCD_INCLUDE_DIRSになります。

変数PKG_OPENCV_INCLUDE_DIRSおよびPKG_OPENCV_LIBRARIESには、それぞれヘッダファイル(コンパイルステージ)とライブラリ(リンクステージ)が含まれています。

私が気づいた非常に重要なことは、変数PKG_OPENCV_LIBRARIESがライブラリを提供するだけであり、リンク段階ではライブラリパスが提供されないことでした。 1つのコマンドで同様のライブラリ・パスを使用するためには、

PKG_OPENCV_LDFLAGS 

を使用するためにこの変数は、ライブラリパスだけでなく、パッケージの設定ファイルにリストされているすべてのライブラリが含まれています。

exmapleため

:私はあなたのコード内の任意pkg_search_moduleを参照してくださいいけない

include_directories(${PKG_OPENCV_INCLUDE_DIRS}) 
target_link_libraries (FINAL_BINARY ${PKG_OPENCV_LDFLAGS}) 
+0

私はなぜこれらの変数を使って検索しているのかわかりません... 'CMAKE_PREFIX_PATH、CMAKE_FRAMEWORK_PATH、CMAKE_APPBUNDLE_PATH' –

+0

@DawidDrozd私はあなたの質問/文を理解していません。あなたは精巧なPLZできますか? – infoclogged

+0

'CMAKE_PREFIX_PATH'などを設定し、pkg_search_moduleはそれらのパスをチェックしません –

関連する問題