Question

Je ne parle pas de faire du code portable. Ceci est plus une question de distribution. J'ai un projet de taille moyenne. Il dispose de plusieurs dépendances sur des bibliothèques communes (par exemple OpenSSL, zlib, etc). Il compile bien sur ma machine et maintenant il est temps de donner au monde.

construire essentiellement l'ingénierie à son meilleur. Je veux faire des installateurs pour Windows, Linux, MacOSX, etc. Je veux faire une boule de goudron téléchargeable qui fera le travail de code avec un ./configure et un make (probablement via autoconf). Il serait la cerise sur le gâteau d'avoir une option de faire qui construirait la installers..maybe même cross-compilation si un programme d'installation de Windows pourrait être construit sous Linux.

Quelle est la meilleure stratégie? Où puis-je attendre à passer le plus de temps? Si le premier objectif soit autoconf ou y at-il d'autres outils qui peuvent aider?

Était-ce utile?

La solution

Je recommande CMake . Avantages:

  • Il est très facile à utiliser pour la construction de projets simples et complexes avec les bibliothèques statiques, les bibliothèques dynamiques, exécutables et leurs dépendances.
  • Il est indépendant de la plateforme et génère makefile et / ou fichiers de projet pour la plupart des compilateurs ure et IDEs.
  • Il fait abstraction des différences entre les fenêtres et unix, par exemple « libShared.so » et « Shared.dll » sont appelés « partagée » (CMake gère les différences de nom pour chaque plate-forme), si elle est partagée fait partie de votre projet, il trie la dépendance sinon il suppose qu'il se trouve dans le chemin de liaison.
  • Il enquête sur le système des utilisateurs pour compilateur et bibliothèques 3ème partie qui sont nécessaires, vous pouvez ensuite éventuellement supprimer des composants lorsque les bibliothèques 3ème partie ne sont pas disponibles ou afficher un message d'erreur (expédie avec des macros pour trouver les plus courantes bibliothèques 3ème partie).
  • Il peut être exécuté à partir de la ligne de commande ou avec une simple interface qui permet à l'utilisateur de modifier les paramètres qui ont été découverts ci-dessus (par exemple, le compilateur ou une version de la bibliothèque 3ème partie).
  • Il prend en charge les macros pour automatiser des étapes communes.
  • Il est un composant appelé cpack qui vous permet de créer un programme d'installation, je pense que cela est juste une chose de ligne de commande make install (je ne l'ai pas utilisé).
  • Le composant CTest intègre avec d'autres bibliothèques de tests unitaires comme test de boost ou un test google.

J'utilise CMake pour tout maintenant, même des projets de test simples avec le studio visuel.

Je ne l'ai jamais utilisé autotools mais beaucoup d'autres utilisateurs ont fait remarquer que CMake est plus facile à utiliser. Le projet KDE déplacé à CMake de autotools pour cette raison.

Autres conseils

Le produit que je travaille n'est pas trop différent de cela. Nous utilisons un système de construction basé autoconf, et il fonctionne très bien.

L'endroit que vous passerez le plus de temps, de loin, soutient les utilisateurs. Les systèmes d'utilisateurs auront toutes sortes de rides que vous ne vous attendez pas jusqu'à ce qu'ils courent en eux, et vous aurez besoin d'ajouter d'autres options de configuration pour les soutenir. Au fil du temps, nous avons ajouté des options pour définir le comprennent et les chemins lib pour chaque bibliothèque que nous dépendons; nous avons ajouté des options pour changer compiler des drapeaux pour travailler autour de divers pépins étranges dans différentes versions de ces bibliothèques (ou des modifications de l'API d'une version à une autre que le besoin des changements dans notre code), nous avons ajouté des solutions de contournement du fait que certaines bibliothèques BLAS utiliser une interface C et certains utilisent une interface Fortran donc, même si elles sont théoriquement mises en œuvre de la même bibliothèque, ils font un peu différemment quelques petites choses, et ainsi de suite. Vous ne pouvez pas anticiper tout cela à l'avance, et il faut aussi documenter afin que les utilisateurs peuvent comprendre quelles options.

Oh, et les installateurs sont vraiment une douleur, car ils dépendent de l'OS en général (à moins que c'est juste un script shell et vous Cygwin), et les emplacements pour installer à tendance à être dépendant du système d'exploitation, et ainsi de suite. C'est un autre domaine qui prendra du temps -. Soit dans la construction d'un bon installateur, ou aider les utilisateurs à mettre les choses manuellement

La mise en place décompiler croix est, dans mon expérience, vaut bien la peine (au moins pour le cas de Linux à Windows, pas sûr de MacOS / X) - beaucoup plus facile que d'essayer de maintenir les systèmes de construction multiples différents synchronisation.

En tant que point de vue différent, il y a la possibilité que le projet OpenFOAM utilise pour leur bibliothèque assez grand C ++, ce qui est de le distribuer avec un « approuvé » compilateur G ++ et packages pour tous les autres composants, de sorte qu'ils ne le font pas à vous soucier de différents compilateurs et ainsi de suite. Mais cela fonctionne vraiment que sur un seul système d'exploitation. Je suppose que la version Windows / MacOSX de qui est de fournir des images VMWare pré-réglage. Dans certains cas, il y a quelque chose à dire pour cela ....

Utilisez autotools, la plupart des utilisateurs sont familiers avec eux (à savoir qu'ils savent exécuter ./configure && make && make install)

  • Créer tar.gz avec make dist, testez assurez-vous qu'il compile et fonctionne sur plus d'un système.
  • Pour Linux / Unix / Cygwin, ne fournit pas les installateurs ... source tar.gz est plus alors tout va bien. Dans tous les cas, chaque distribution Linux a ses propres règles d'emballage et la plupart d'entre eux savent à utiliser autoconf construit, les utilisateurs peuvent avoir 32 ou les systèmes 64 bits ou même courir sur PPC ou Sparc - alors ne prenez pas la peine.

    Peut-être qu'il vaut la peine de créer un deb ou rpm pour les systèmes les plus populaires mais pas de plus que ..

  • Pour Windows (natif, non cygwin) fournissent des binaires. Installation d'auto Migw + est très douloureux et les utilisateurs de Windows sont généralement plus « Next-> Continuer-> suivant » utilisateurs puis « wget / tar / configure / make / make-install » utilisateurs » Fournir zip ou un installateur, il y a des installateurs de logiciels libres là-bas.

    Rappelez-vous les utilisateurs de Windows pauvres par défaut n'ont pas zlib ou OpenSSL ... Ainsi, vous aurez besoin de les expédier avec votre colis.

A propos de CMake ...

Si vous ciblez principalement plate-forme Windows ou vous êtes prêt à soutenir MSVC alors probablement vous devriez considérer. Dans le cas contraire, autotools offrent une bonne distribution et construire alternative.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top