web-dev-qa-db-ja.com

cmakeにPKG_CONFIG_PATHを設定します

Opencvをローカルでビルドし、ローカルのディレクトリ(システムのデフォルトではない)にインストールしました。 opencv.pcは、このローカルフォルダーのpkgconfigフォルダーの下にあります。私のプログラムからopencvファイルをリンクして含めたいので、cmakeからこのopencv.pcを見つけるにはどうすればよいですか。

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

コマンドに特定のパス(find_package()を使用したHINTSと同様)を使用するように強制できるパラメーターがなく、システムのデフォルトではありません。

したがって、基本的に.cmakeは機能します。

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

「my/path/to/pkgconfig(opencv.pc」の下にあるopencv.pcを使用したい

10
infoclogged

@OlivierMからいくつかの調査とヒントを受け取った後、私は答えを見つけました。

手順は次のとおりです。

方法I

CMAKE_PREFIX_PATHは、.pcファイルを見つけるように設定できます

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

方法II 2番目の方法は、PKG_CONFIG_PATHを使用することです。これは、.pcファイルを探すためのシステム環境変数です。

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には、それぞれヘッダーファイル(コンパイルステージ)およびライブラリ(リンクステージ)が含まれています。

私が気付いた非常に重要なことの1つは、変数PKG_OPENCV_LIBRARIESがライブラリーを提供するだけで、リンクステージ中のライブラリーパスは提供しないことです。 1つのコマンドでライブラリパスも使用するには、以下を使用する必要があります。

PKG_OPENCV_LDFLAGS 

この変数には、ライブラリパスと、パッケージ構成ファイルにリストされているすべてのライブラリが含まれています。

例:

include_directories(${PKG_OPENCV_INCLUDE_DIRS})
target_link_libraries (FINAL_BINARY ${PKG_OPENCV_LDFLAGS})
14
infoclogged

PKG_CONFIG_PATHはCMake行で:

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

私はこれでこの回避策を行いました file

興味深いことに、CMake 3.1はPKG_CONFIG_PATH一部のCMake変数を参照: https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3df5147

5
OlivierM