2017-06-11 4 views
2

J'ai construit opencv localement et l'ai installé dans un répertoire local (pas le système par défaut). Le opencv.pc est présent sous un dossier pkgconfig dans ce dossier local. Comment puis-je trouver cette opencv.pc de cmake, parce que je veux lier et inclure les fichiers opencv de mon programme.set PKG_CONFIG_PATH in cmake

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

n'a pas de paramètre dans lequel je peux forcer la commande à utiliser un chemin spécifique (semblable à CONSEILS avec find_package()) et non pas la valeur par défaut du système.

donc essentiellement .cmake œuvres:

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

mais je voudrais utiliser un opencv.pc situé sous « mon/chemin/vers/pkgconfig (opencv.pc

Répondre

1

Vous pouvez définir avec PKG_CONFIG_PATH la ligne CMake:

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

je l'ai fait cette solution de contournement dans ce file

Fait intéressant, il semble que CMake 3.1 étend PKG_CONFIG_PATH avec une variable CMake voir: https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3df51470

+0

Je ne vois pas pkg_search_module dans votre code. comment cherchez-vous les modules? – infoclogged

+0

Il s'agit en fait d'un fichier commun que j'ai créé pour prendre en charge la compilation croisée. J'ai utilisé 'find_package' dans le haut' CMakeLists.txt'. Voir [ici] (https://github.com/labapart/gattlib/blob/master/CMakeLists.txt#L30) – OlivierM

1

Après avoir fait quelques recherches et un indice de la @OlivierM, j'ai trouvé la réponse.

Voici les étapes: Si PKG_CONFIG_PATH n'est pas défini, CMAKE_PREFIX_PATH peut être configuré pour trouver les fichiers .pc

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

Méthode d'utiliser pkgconfig. En supposant que PKG_CONFIG_PATH est déjà défini, sinon défini en utilisant ENV.

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

Suivant

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

S'il vous plaît noter que la variable PKG_OPENCV peut être quoi que ce soit son nom. Quoi que ce soit est nommé son utilisé comme un préfixe. par exemple si vous nommez ABCD, alors les répertoires d'inclusion seront ABCD_INCLUDE_DIRS

Les variables PKG_OPENCV_INCLUDE_DIRS et PKG_OPENCV_LIBRARIES contiennent respectivement les fichiers d'en-tête (étape de compilation) et les bibliothèques (étape de liaison).

Une chose très importante que j'ai remarquée était que la variable PKG_OPENCV_LIBRARIES fournit juste les bibliothèques et pas le chemin de bibliothèque pendant l'étape de liaison. Pour utiliser le chemin de la bibliothèque aussi bien dans une commande, on doit utiliser

PKG_OPENCV_LDFLAGS 

Cette variable contient le chemin de la bibliothèque, ainsi que toutes les bibliothèques répertoriées dans le fichier de configuration du package.

pour exmaple:

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

Je ne sais pas pourquoi il n'utilise pas ces variables pour chercher ... 'CMAKE_PREFIX_PATH, CMAKE_FRAMEWORK_PATH et CMAKE_APPBUNDLE_PATH' –

+0

@DawidDrozd Je ne comprends pas votre requête/instruction. Pouvez-vous élaborer? – infoclogged

+0

Je mets 'CMAKE_PREFIX_PATH' etc. et pkg_search_module ne vérifie pas ces chemins –