2013-01-17 3 views
7

Quel est le processus de développement recommandé pour les programmes D qui utilisent des paquets clonés à partir de github et construits séparément?D Processus de développement

En règle générale par rapport à la façon dont les projets C/C++ sont construites en utilisant make, autotools, CMake, etc.

La plupart des autres spécifications de construction ont une cible d'installation. Devrait-il y avoir une cible d'installation dans la construction ou devrions-nous juste lier une bibliothèque directement à partir de l'endroit où elle est placée et ajouter son enregistrement dans D_INCLUDE_PATH et ensuite diriger directement vers eux en utilisant DFLAGS=-I<D_INCLUDE_PATH>?

+1

+1 pour la question. Il y a quelque temps, je cherchais aussi cela et je n'ai rien trouvé. Terminé en utilisant CMake pour mes propres projets et en installant manuellement les bibliothèques à la racine personnelle comme '~/droot' (donc les bibliothèques étaient dans' ~/droot/lib') et en spécifiant ce chemin dans la configuration de CMake. Ceci est loin d'être confortable, par ex. Java avec son Maven ou Go avec son «go get». –

+0

Est-ce que quelqu'un a essayé de secouer avec D? http://community.haskell.org/~ndm/shake/ – Arlen

Répondre

2

je réalise mon commentaire peut effectivement être une réponse à la question, si elle est ici:

processus de développement D ne peut pas être différent de semblable en C ou C++ monde. Est-ce vraiment difficile à voir? Presque tous les compilateurs C et C++ génèrent du code "natif". D n'est pas une exception. Il y avait le projet D.NET qui pouvait cibler .NET, mais il est inactif depuis des années ...

De plus, tous les outils utilisés dans les projets basés sur C/C++ peuvent être facilement utilisés pour autre chose. CMake peut également être utilisé dans des projets Java ou .NET. Idem pour Make et/ou Autotools. Pourquoi Maven et Ant plus populaire dans le monde de Java est une histoire différente. En parlant d'eux, vous pouvez utiliser Maven ou Ant dans le processus de développement D! Haut de la page, vous devez écrire vos propres plugins Maven pour le rendre plus facile et plus flexible, mais c'est faisable, et serait en fait un très beau projet. D'après ce que j'ai vu, les programmeurs D s'en tiennent au bon vieux Make ou écrivent un script BASH pour faire le tout. Cependant, j'ai vu des gens de la fondation Lycus utiliser WAF. Si vous êtes programmeur Python, vous allez juste aimer WAF. Sinon, essayez des choses similaires - J'ai vu des gens utilisent SCons, Remake, Premake, etc ...

DSSS+Rebuild est la chose la plus proche d'un outil très utile fait avec D. Malheureusement, ils sont des projets morts. :(

Je travaille sur un outil de style maven, mais compte tenu de la quantité de temps dont je dispose - il sera utilisable en 2014 :)

+1

En fait, le processus de construction D est très différent de C \ C++. C \ C++ utilise des fichiers d'en-tête, et vous avez seulement besoin de recompiler un fichier d'implémentation s'il est changé, si l'un des fichiers d'en-tête 'include's a changé, si l'un des fichiers d'en-tête' include'd dans le fichier 'header inclus par ce fichier et ainsi de suite. Si vous effectuez une modification dans un fichier d'implémentation, vous devez uniquement recompiler ce fichier. D est différent - l'API et l'implémentation sont dans le même fichier, et D repose fortement sur la métaprogrammation des templates, donc si vous changez quelque chose, vous devez tout recompiler. Cela rend les constructions incrémentielles impossibles. –

+0

@IdanArye: Bon commentaire. C'est la principale raison pour laquelle je demande. Les outils de construction traditionnels ont beaucoup à voir avec la spécification manuelle des dépendances.Ce n'est pas toujours vrai pour le processus de construction D. Par exemple, lorsque vous utilisez DMD, vous pouvez générer des fichiers d'interface D (.di) pour accélérer les choses, mais vous n'avez pas à le faire. –

+0

Je suis d'accord avec Idan, mais je ne voulais pas entrer dans de tels détails. Après tout, la question ne portait pas sur ceux-là, mais sur le cycle de vie global si je ne me trompe pas. :) – DejanLekic

Questions connexes