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を使用したい
@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})
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