10
votes

CUMAKE: Commande d'inclure les annuaires (comment mélanger les chemins?)

J'ai un projet de cmake qui inclut et des liens contre deux bibliothèques, disons A code> et B code> (en réalité, plus de deux et l'un d'entre eux est plus de choses, Mais cela n'a pas d'importance ici). Les deux sont situés via windsomething.CMake code> scripts qui remplissent (correctement) remplir les variables de cmake standard telles que celles d'inclure les répertoires sont ajoutées via xxx pré>

et la liaison étant effectuée ultérieurement via P>

TARGET_LINK_LIBRARIES(mytarget ${A_LIBRARIES} ${B_LIBRARIES})


0 commentaires

3 Réponses :


5
votes

Si a code> et B code> sont différentes bibliothèques contenant différents fichiers d'en-tête et chemins, il ne devrait y avoir aucun problème à faire ce que vous faites maintenant.

qui étant dit , si A code> et B code> sont des bibliothèques similaires contenant des fichiers d'en-tête du même nom au même endroit, qui est problématique. Dans ce cas, l'ordre du include_directory () code> est important. J'ai couru un petit test où j'avais trois copies d'un fichier d'en-tête. La première copie est située dans mon chemin système (dire / usr / include code>). Les autres copies sont situées dans deux emplacements définis par l'utilisateur (dire / tmp / include1 code> et / tmp / include2 code>). Le fichier dans / tmp / include1 code> est trouvé et utilisé d'abord si je mettez le include_directory () code> appelez dans l'ordre suivant: p>

include_directory("/tmp/include2")
include_directory("/tmp/include1")


0 commentaires

3
votes

Lorsque vous utilisez des bibliothèques tiers, je ferais toujours cette

Bibliothèque A + B Fichiers d'en-tête:

troisième_Party / Inclure / liba_name / <- Mettez des fichiers d'en-tête de là < p> troisième_party / Inclure / libb_name / <- Mettez des fichiers d'en-tête de là

dans les fichiers source, vous l'utiliseriez toujours comme ceci xxx

alors que vous peut toujours utiliser -i "tiers_party / include" comme le dossier Inclure et aucune ambiguïté dans la commande ne se produira dans les fichiers source.

Ceci aussi désambigue des fichiers d'en-tête personnalisés des fichiers d'en-tête de système qui pourraient s'affronter de temps en temps de 3ème libs de parti.


0 commentaires

6
votes

Voici quelle cmake dit à propos de include_directies () :

Incluse_directories ([après la page précédente] [Système] Dir1 [Dir2. ..])

Vous pouvez spécifier que vous souhaitez inclure des répertoires recherchés avant ou après que le système inclue les répertoires au moment de la raconter à propos de ces répertoires.

Vous pouvez également être spécifique à une cible:

cible_include_directies (cible [Système] [avant] [ Articles1 ...] [[articles2 ...] ...])


1 commentaires

Essayé include_directies (avant système $ {tiers_lib} /python3.7.1/include) Sous Windows Essayez de remplacer le chemin Python3.6 défini dans le chemin du système, toujours trouvé Python3.6 en-tête.