J'aimerais construire des bibliothèques tierces à partir des sources et avoir des cibles cmake importables pour les bibliothèques préconstruites qui peuvent être partagées avec le projet (relocalisables).
Les bibliothèques que je construis sont de plusieurs types :
- cmake moderne, qui peut exporter des cibles
- Ancien cmake, qui n'exporte PAS de cibles, mais peut avoir pkgconf
- Autoconf / makefiles réguliers qui ont souvent des sorties pkgconf
- Petites pièces uniques sans fichiers de construction.
Il peut y avoir des dépendances entre les bibliothèques, et quelques dépendances système par exemple :
- LibA dépend de LibB
- LibB dépend de certaines bibliothèques présentes sur le système : sysLibXX, sysLibYY
Question
Comment puis-je empaqueter les bibliothèques préconstruites afin que les cibles cmake et les bibliothèques préconstruites puissent être partagées et importées pour construire mon projet sur d'autres machines ?
Problèmes
-
L'utilisation de cmake pour "installer" dans un chemin qui peut être partagé avec le projet, produit intrinsèquement des dépendances non relocalisables. Par exemple, si la librairie mathématique
libm
est trouvé par cmake, il est écrit en tant que chemin absolu dans la cible exportée générée par cmake/usr/lib/x86_64-linux-gnu/libm.so
. Cela ne fonctionne pas sur d'autres machines dont les chemins d'accès aux bibliothèques système sont différents.- Puis-je d'une manière ou d'une autre demander à cmake de garder les références de bibliothèques relocalisables dans les cibles exportées ? (Comme :
-lm
)
- Puis-je d'une manière ou d'une autre demander à cmake de garder les références de bibliothèques relocalisables dans les cibles exportées ? (Comme :
-
Tous les paquets n'exportent pas les fichiers cmake, et même s'ils le font, ils peuvent le faire de manière incorrecte.
- Dois-je éditer à la main ou écrire à partir de zéro XXConfig.cmake scripts pour les rendre relocalisables ?
des idées utiles
Il serait utile de décrire le processus permettant de passer des sources dans les différentes situations ci-dessus au script redistribuable en tirant parti de toutes les informations possibles telles que pkgconf ou les cibles d'exportation générées automatiquement.
Par exemple :
Avec la construction vanille scripts je peux le faire :
./configure --prefix="`pwd`/temp"
make
make install
Ensuite, je pourrais peut-être corriger les scripts de pkgconf à la main pour supprimer les chemins absolus et utiliser une fonctionnalité de cmake pour lire le pkgconf dans un fichier XXConfig.cmake personnalisé ?
Il serait vraiment utile de savoir si quelqu'un a essayé quelque chose de ce genre et s'il a une idée de la facilité de maintenance de ce système.