10
votes

Quel gnu se substitue recommandez-vous?

Imaginez que vous êtes libre de choisir un outil tel que GNU marque pour un nouveau projet C ++. Que choisiriez-vous? Sont des substituts utilisables là-bas?

il doit avoir / être

  • une interface de ligne de commande
  • "facile" de comprendre
  • Facile à configurer un projet C ++ par défaut
  • peut prendre en charge src / bin séparation comme commun pour Java
  • peut ne pas ajouter trop de dépendances à d'autres logiciels / libs
  • plate-forme indépendante ( nouvelle )
  • Caractéristiques:
    • Construire des règles / modèles comme la marque mais de manière lisible par l'homme
    • Annuaires rampants récursives et appliquer les règles s'il n'y a pas d'autre "Makefile"
    • Configuration par exception

      Remarque:

      Rien n'est faux avec GNU FAIT. Je n'aime tout simplement pas sa grammaire, toutes les choses qui poussent dans les années et les problèmes rares stupides font des problèmes. J'utilise GMake depuis des années maintenant.


6 commentaires

Désolé de pouvoir affiner ma question. Mais j'ai fait trop d'implications que je vous aurais dit


Pourrait vouloir faire de cette communauté wiki. Je ne pense pas que demander ou répondre à cela reflète vraiment beaucoup de connaissances objectives, ce qui construit uniquement des systèmes qu'une personne possède une expérience.


La marque récursive ne doit pas être utilisée, comme vous l'avez découvert. Le maquillage de niveau supérieur est censé inclure les autres qui ne les appellent pas.


Pourquoi l'ajout de dépendances sur Python ou Java est-elle une préoccupation? Je peux comprendre vouloir éviter les dépendances sur des produits obscurs ou coûteux, mais la programmation de machines virtuelles linguistiques, en particulier comme couramment utilisées comme Python et Java, sont en quelque sorte standard.


@Imagist: Python, par exemple, a changé la syntaxe vers la version 3.1 - si je mettez à jour les pythons pour une raison quelconque, le système de construction peut être brisé par la suite. Pour Java, je vais accepter la dépendance telle qu'elle est plus stable.


Pourquoi changer? Apprenez à l'utiliser .


9 Réponses :


5
votes

0 commentaires

2
votes

Quel est le problème avec Gmake?

Quels problèmes cela signifie-t-il que vous voulez utiliser? Il ne sert à rien de recommander un autre outil s'il a les mêmes problèmes perçus que GMake.

Nous utilisons GMake dans notre système de construction et nous sommes extrêmement satisfaits de sa performance, de la flexibilité et des fonctionnalités


3 commentaires

Rien n'est faux avec ça. Je n'aime tout simplement pas sa grammaire, toutes les choses qui poussent dans les années et les problèmes rares stupides font des problèmes. J'utilise GMake depuis des années maintenant, mais maintenant, j'ai la chance de passer à quelque chose de nouveau. Donc, je vais prendre la chance et demander à la communauté. ;)


@Tuergeist, quelques points de justice. Nous utilisons GMake avec des maquillages non récursifs et c'est tellement meilleur que le système de fabrication récursif traditionnel. Le seul inconvénient réel est qu'il faut beaucoup de travail pour configurer le système initial non récursif. Sur la marque non récursive latérale de plus a considérablement réduit nos délais de construction (3000 fichiers source, ~ 1 million de lignes de code compilées dans environ 6-8 minutes) permettent de suivre de grandes dépendances et des constructions parallèles. (toutes choses que vous pouvez probablement obtenir d'autres outils)


@Glen: ça sonne bien. Ma dernière expérience consistait à attendre 45 minutes pour presque la même quantité de code et de fichiers sur un PC à double noyau 3GHz :( (avec des fichiers récursifs et un système de construction à trois étages - étapes pour IDL, Libs + objets, binaires))



8
votes

Que diriez-vous de "GNU"?

Vous avez demandé quelque chose comme celui-ci sans donner aucune indication sur les fonctionnalités que vous souhaitez que ce que vous voulez ne soit pris en charge par GNU.


1 commentaires

Désolé, j'ai édité ma question. Mon but n'était pas de réduire vos pensées.



9
votes

scons et WAF est bon (Eh bien, IMHO de toute façon) construire des systèmes et dépendent que sur Python.


3 commentaires

Hmm, ok. Mais comme vous l'avez dit, WAF apporte des dépendances à Python :(


+1 pour les scons. La dépendance python n'est pas un problème - nous construisons sur Mac, gagnez, Linux.


J'aime la machine meilleure que les scons, mais je ne comprends pas bien comment s'étendre pour la vie de moi. En fin de compte, je préfère faire à quel point il est facile d'ajouter de nouvelles règles / types cibles et de la rapidité avec laquelle il commence à fonctionner. SCONS Performance sur les grands projets est juste Woothful.



7
votes

CMAKE doit répondre au plus, sinon tout pour vos besoins.

  • Il générera les maquillages pour vous.

  • Il a de bons primitives spécifiques à un domaine, ainsi qu'une langue simple pour les fois où vous devez faire quelque chose de spécial.

  • Il résout la plupart des problèmes avec une marque récursive (voir Make récursif est considéré comme nocif papier).

  • Il utilise une version hors source, vous disposez donc de votre bin / src séparation.

    J'ai trouvé qu'il est facile d'écrire, facile à entretenir et rapide à construire.

    ... plus:


0 commentaires

19
votes

J'utilise CMAKE , et je suis très heureux de faire le commutateur.

Modifier

Liste de fonctions Comme trouvé dans le Article Wikipedia :

  • Les fichiers de configuration sont des scripts cmake, qui utilisent une programmation Langue spécialisée pour les logiciels construit
  • Analyse de dépendance automatique intégrée pour C, C ++, Fortran et Java
  • Soutien de Swig, Qt, via la langue de script Cmake
  • Prise en charge intégrée pour de nombreuses versions de Microsoft Visual Studio, y compris les versions 6, 7, 7.1, 8.0 et 9.0
  • génère des fichiers de construction pour Eclipse CDT (outils de développement C / C ++)
  • Détection des changements de contenu de fichier à l'aide des horodatages traditionnels,
  • Prise en charge des constructions parallèles
  • Compilation croisée
  • Vue globale de toutes les dépendances, en utilisant Cmake pour sortir un diagramme Grapheviz
  • Prise en charge des constructions croisées et connues pour travailler sur
    • Systèmes Linux et autres POSIX (y compris AIX, * BSD Systems, HP-UX, IRIX / SGI et Solaris)
    • Mac OS X
    • Windows 95/98 / NT / 2000 / XP, Windows Vista et Mingw / MSYS
    • intégré à DART (logiciel), CDASH, CTEST et CPACK, une collection d'outils pour tests logiciels et libération

      Mais pour être honnête: à peu près n'importe quoi est meilleur que le Toolchain GNU . < / p>


5 commentaires

Un autre avantage est une installation de plate-forme et des commandes d'emballage de plate-forme faciles.


En fait, j'aime Gmake, avec un tas de fabricants spéciaux que j'ai préparés au fil des ans. Mais je suis récemment passé à CMAKE et il a simplifié le développement multi-plateformes (Linux, OS X, Windows), tellement que CMAKE est ma nouvelle valeur par défaut pour de nouveaux projets.


Je vois plus que la cmake aime le remplacement complet de l'automate / Conf, y compris GMake. Et je conviens que la cmake est beaucoup plus facile à utiliser que des macros m4 d'arcanes ;-) En outre, pour les grands projets, il est nettement plus rapide que GMake.


Cmake est le seul outil là-bas capable de générer des projets Visual Studio de Visual , c'est-à-dire des projets qui invoquent un outil externe.


"Un autre avantage est une installation de plate-forme croisée facile et des commandes d'emballage" Je pense que ./ configure - host = bras-linux-gnueabi ou ./ configure - host = i586-mingw32msvc est simple Enouhg?



3
votes

g'day,

Je suis d'accord avec le couple de réponses, jusqu'à présent, qui recommande de coller avec GMake.

Peut-être avoir un autre aspect de lire les premiers chapitres du livre d'excellent livre de Robert Mecklenburg de Robert Mecklenburg "Gestion des projets avec GNU Gake" ( Sanitizé Amazon Link ).

ou, encore mieux, est de rechercher une copie de l'édition précédente appelée "Gestion des projets avec faire" par Andrew Oram et Steve Talbott. Les premiers chapitres donnent une excellente description de (g) les bases de l'aefile (g) et [mm].

Et je vois que vous pouvez acheter une copie de seconde main du 2e ed. D'Amazon pour la somme princière de 0,01 $! ( Sanitizé Amazon Link )

Après avoir lu cette intro, vous comprenez même à quel point la fabrication est une chaîne arrière, ce qui est un peu intuitif quand il suffit de regarder le comportement de la fabrication.

htth

acclamations,


2 commentaires

Je pense que cette réponse n'est pas utile car elle n'est pas une réponse à ma question. Je n'ai pas demandé une recommandation de guidage.


@Tuergeist, j'ai considéré cela avant de répondre. Mais j'ai trouvé que j'ai considéré comme faisant une nouvelle lumière lorsque j'ai commencé à comprendre son fonctionnement plus profondément. D'où les pointeurs à deux excellentes sources d'informations. (-:



8
votes

Boost.jam

Il a les fonctionnalités que vous avez nommées

  • Interface de ligne de commande;
  • facile;
  • Il provient de la collection de la bibliothèque C ++, de sorte qu'il a un bon support pour C ++ (et il n'est pas limité à C ++, non plus);
  • Il stocke des exécutables dans des endroits dans le répertoire bin , en fonction de la demande de construction que vous avez commandée. Si vous utilisez GCC 4.3.2, vous obtenez les exécutables sous
    • bin / gcc-4.3.2 / débogueur - lors de l'exécution bjam
    • bin / gcc-4.3.2 / version - Lors de l'exécution de BJAM version
    • bin / gcc-4.3.2 / libération / inlinge-éteint / filetage-multis - Lors de l'exécution Libération BJAM Inlinge = Off threading = Multi
    • bin / gcc-4.3.2 / Release / filetage-multis - Pour Libération Bjam Inlinge = Full Filetage = Multi car l'inlinge = Full est par défaut pour la libération.
    • Il n'a pas besoin de la collection de bibliothèques de boost complète, seulement Boost.build et Boost.jam sont nécessaires;
    • Plateforme indépendante;
    • Le jamfile Syntaxe est facile, mais puissant;
    • Vous pouvez diviser la configuration de construction en plusieurs conflits de sous-répertoires.

1 commentaires

Pas si sûr de «facile» si :-)



3
votes

Autotools - AutoConf / Automake / LibTool Ils sont des instruments de construction très puissant.

Son prend du temps pour commencer avec eux, mais après - ils vous servèrent très bien.

Et qu'est-ce qui est plus important, ils sont significativement plus puissants que leurs remplacements (CMAKE, BJAM, SCONS, etc.).

Comment sont-ils plus puissants?

  • Transparent Soutien à la construction de bibliothèques statiques et partagées via libtoure.
  • Soutien de la désinstallation (non dans Cmake)
  • Soutien des chemins d'installation standard - très important dans l'emballage.
  • Support complet et intégration de GetText.
  • Prise en charge transparente et manifestée de la compilation croisée.

    Beaucoup de choses. Cmake peut faire la plupart des choses, mais pour chacun d'entre eux, vous devriez écrire de longs scripts ou spécifier de nombreuses choses manuellement.


5 commentaires

Il a également de nombreux inconvénients. Pour celui-ci, il met des fichiers partout et n'a pas de mécanisme intégré, je sais que les éliminer. C'est un peu de préoccupation lorsque vous utilisez un outil de version de version. Pourriez-vous également élaborer de quelle manière les façons autotools sont plus puissants que BJAM ou CMAKE?


"Pour un, il met des fichiers partout et n'a pas de mécanisme intégré, je sais que les éliminer." Tout d'abord, vous pouvez faire des constructions hors source. Donc, tous les fichiers seront stockés dans un autre répertoire.


S'il vous plaît ajouter un pointeur sur la façon de faire ça. C'est trivial avec Bjam ou Cmake, mais je n'ai jamais vu un projet à l'aide d'AutoTools qui n'écluent pas l'arborescence source avec un tas de fichiers générés. Et je ne parle que des fichiers générés par le processus de construction lui-même, mais également du groupe de fichiers généré dès que vous tapez configurez. Je serais assez surpris si cela est possible du tout. S'il n'y a pas de maquillage généré, par exemple, comment peut-on faire fonctionner après la partie configurante dans le trice "./configure; faire; faire installer".


> Comment faire éventuellement fonctionner après la partie configurante dans le trice commun "./configure; faire; faire installer".


Le nettoyage également est assez simple: rendre DistClean fait le travail.