Je compose, sur une machine qui dirige MacOS 10.15, un projet qui expédie une ancienne version de libpng (1.6.17) en tant que sous-module. Le code correspondant est disponible chez https://github.com/glennrp/libpng . J'ai aussi installé libpng 1.6.37 par homebrew. P>
Jusqu'à ce qu'il n'y a pas si longtemps, j'ai été capable de compiler libpng 1.6.17 en utilisant cmake sans problème. Depuis très récemment (mais la date exacte est inconnue de moi), la construction échoue avec des erreurs telles que: p> J'ai couru quelques chèques contre une copie de mon projet que j'avais encore compilé correctement parce que Clake n'était pas renoncé à elle dessus. La seule différence entre les deux cas est un drapeau Je re-ran cumake sur la copie du projet qui fonctionnait et j'ai eu la même erreur, qui m'a pointé sur un problème associé au système. J'ai ensuite vérifié directement les sources de libpng et j'ai obtenu la même erreur. P> Qu'est-ce qui a ajouté ce Maintenant, ça devient drôle. Si vous cédez une libernisation plus récente (j'ai essayée avec 1.6.21, 1.6.25, 1.6.28, 1.6.33 et 1.6.37), le problème disparaît, bien que le drapeau soit toujours ici: P> -I / USR / local / Inclure CODE> Ajouté aux appels de compilateur (j'ai ajouté du marquage pour aider à voir la différence): P>
étapes pour reproduire h1>
question h1>
-I / USR / local / Inclure code> drapeau sur mes appels de compilateur? em> p >
Question bonus (peut-être plus intéressante) h1>
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -I/usr/local/include -I. -I../ -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -MD -MT CMakeFiles/png16_static.dir/pngrio.o -MF CMakeFiles/png16_static.dir/pngrio.o.d -o CMakeFiles/png16_static.dir/pngrio.o -c ../pngrio.c
3 Réponses :
En fait non: les scripts de Cumake Country n'ont pas changé, et c'est ce qui me confond. J'ai construit la bibliothèque avec succès sur d'autres machines avec une configuration apparemment similaire (j'ai également vérifié les appels de compilateur pour être sûr) et ne pas être exécuté dans cette erreur, il doit donc y avoir autre chose à définir ces indicateurs.
Oui Parfois, la cmake prendra une variété de libs et comprendra des DIRS et un mélange librement et une correspondance. Si vous devez conserver plusieurs versions, vous devez utiliser la commande CUPAKE pour transmettre les packages appropriés. p>
Je suis finalement arrivé au bas de cela. Il s'est avéré que la dépendance de Zlib de libpng était celle qui me donne des ennuis (indirectement). P>
MacOS Ships Zlib et il est généralement connu des développeurs qui ne ressent donc pas la nécessité d'installer une ZLIB 3ème partie. Cependant, CMAKE'S Le répertoire incluent correspondant est Je suis sûr qu'il y a une meilleure façon de gérer cela par "Faire du cmake Droit" en libpng et forçant la recherche de bibliothèque dans des chemins système, mais mes compétences de cmake ne sont pas assez bonnes pour dire ce qui devrait être fait exactement. Et de toute façon, c'est un peu hors sujet par rapport à la question. P> FIND_PACKAGE CODE> ne connaît pas cette préférence et prendra une implémentation de ZLIB trouvée dans
/ USR / local code>, par exemple s'il est installé par Homewbrew. Pour une raison quelconque, une ZLIB a été installée par un logiciel tiers à cet endroit sur mon système, pas un package homebrew, qui a rendu la détection plus difficile, et il a été détecté par
Find_Package Code>. P>.
/ usr / local / include code>. Le code CMAKE de LibPng est tel que ce répertoire est ensuite ajouté à la liste des répertoires d'inclure, ce qui entraîne les conflits d'en-tête mentionnés dans la question. J'ai compris ce qui se passait en passant par
cmakecache.txt code> (recherche de
/ usr / local / include code>), donc la leçon principale est la suivante: N'oubliez pas de Vérifiez votre cache de cmake dans de telles situations em>. p>
Comment résoudre le problème h1>
brew médecin code> et supprimé les fichiers qui n'étaient pas censés être ici. Ceci, cependant, pourrait avoir des conséquences indésirables si la version spécifique en zlib assis dans
/ usr / local code> est réellement requise par une pièce de logiciel. P>
Find_Package code> < / a> sur l'endroit où il devrait choisir Zlib. Soit un code dur l'indice à l'aide de l'argument code> ou de la configuration à l'aide de l'argument
zlib_root code> (vous pourriez avoir à définir des stratégies pour cela). P>