2016-02-13 1 views
1

Disons que j'ai une bibliothèque chargée en tant que paquet dans conan, qui utilise OpenGL, et en tant que tels liens avec GL dans le CMakeLists.txt. Est-ce que les utilisateurs de la bibliothèque doivent à nouveau se lier explicitement à GL? Est-ce que conan fournit une méthode pour le suivre et l'inclure dans ${CONAN_LIBS}?Puis-je cacher mes drapeaux de lien aux utilisateurs de mon paquet conan?

Le plus proche chose que je trouve dans la docs est la méthode package_info, où il semble que vous pouvez spécifier des options supplémentaires éditeur de liens, mais je ne semble pas l'utiliser correctement dans conanfile.py de ma bibliothèque. J'ai essayé tous:

self.cpp_info.sharedlinkflags = ["-lGL", "GL", "libGL", "libGL.so", "-llibGL.so"] 

Mais si dans le code utilisateur que je ne mets pas le drapeau de lien, il AUGMENTATIONS « référence non définie » aux méthodes de GL.

EDIT: Je travaille dans Linux Mint 17.

+0

Il peut être utile d'indiquer le système d'exploitation utilisé. – BitTickler

Répondre

3

Oui, vous devez le déclarer dans la méthode conanfile.pypackage_info(), comme conan découple construction (tel que défini dans vos fichiers CMake) de gestion des paquets. Il y a un attribut spécifique pour les bibliothèques dans l'attribut cpp_info, que vous pouvez utiliser:

def package_info(self): 
    self.cpp_info.libs = ["GL"] 

Ce champ libs est transitive entre les dépendances et la lib GL sera contenue dans la variable ${CONAN_LIBS}

Le sharedlinkflags est transitif aussi, et il se termine avec ses valeurs accumulées dans la variable cmake ${CMAKE_SHARED_LINKER_FLAGS}. Mais comme son nom l'indique, c'est uniquement pour les liens partagés, il est donc probable que vous ne construisiez pas une telle bibliothèque partagée, donc vos balises lib comme GL ne sont pas appliquées à votre cible.