J'ai un projet de cmake qui inclut et des liens contre deux bibliothèques, disons et la liaison étant effectuée ultérieurement via P> 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
TARGET_LINK_LIBRARIES(mytarget ${A_LIBRARIES} ${B_LIBRARIES})
3 Réponses :
Si qui étant dit , 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.
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")
Lorsque vous utilisez des bibliothèques tiers, je ferais toujours cette
Bibliothèque A + B Fichiers d'en-tête: P>
troisième_Party / Inclure / liba_name / <- Mettez des fichiers d'en-tête de là P> < p> troisième_party / Inclure / libb_name / <- Mettez des fichiers d'en-tête de là P>
dans les fichiers source, vous l'utiliseriez toujours comme ceci p> 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. P> 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. p> p>
Voici quelle cmake dit à propos de Incluse_directories ([après la page précédente] [Système] Dir1 [Dir2. ..]) p>
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. P>
Vous pouvez également être spécifique à une cible: p>
cible_include_directies (cible [Système] [avant] [ Articles1 ...] [[articles2 ...] ...]) p> include_directies () code>: p>
Essayé include_directies (avant système $ {tiers_lib} /python3.7.1/include) code> Sous Windows Essayez de remplacer le chemin Python3.6 défini dans le chemin du système, toujours trouvé Python3.6 en-tête.