2010-12-29 1 views
0

J'ai un grand projet qui est plutôt hétérogène - différents langages et compilateurs sont impliqués, produisant un build avec l'aide de GNU make.Structure du dossier du projet: le code source du makefile est-il également?

La structure du dossier de projet comprend:

project 
    src 
     haxe   --Haxe source code 
     graphics  --Embeddable graphic resources 
     locale  --Locale-specific resources 
     chinese --Chinese language resources 
     english --Generic English resources 
    build 
     china   --Chinese market 
     debug  --Debugging/Testing for developer(s) 
     release --Release 
     europe  --European market 
     debug  -- ... 
     release -- ... 

Tous construit sont produits par la mise en place et en cours d'exécution « faire ». Ce que je ne peux pas décider, c'est si ces makefiles devraient aussi être mis dans le répertoire 'src'? Je considère généralement que le matériel original que j'écris à la main est un code source (puisque par ma ligne de pensée il provient de moi et n'est produit par aucun programme d'une autre entrée) et j'écris mes makefiles à la main. Une autre raison pour laquelle je considère cela est parce que SEUL 'src' répertoire est un dépôt Git - je n'ai pas vraiment besoin de suivre la version autre chose. Est-ce que je mets tous les Makefiles dans 'src'?

Répondre

2

Quelle est actuellement la structure de votre répertoire build? Est-ce la sortie compilée?

Intuitivement (et je peut venir d'un monde de développement très différent de celui que vous, donc « intuitivement » est un terme relatif) quand je vois un dossier build adjacent un dossier src, j'attends le code source du programme soit dans le ce dernier et les scripts/outils/etc. nécessaire pour le construire pour être dans le premier. Les scripts (makefiles dans ce cas, bien que potentiellement aussi pour inclure d'autres choses) sont eux-mêmes du code source, comme vous le dites, mais ne sont pas la source du programme. La distinction est que l'un est «ce qui est construit» et l'autre «comment le construire». Si je vous ai bien compris, src est ce qui est lié à votre contrôle de source et build ne l'est pas? Dans cette circonstance, je créerais probablement un build (ou builder ou building ou quelque chose de ce genre) sous src pour héberger les scripts. Il peut être légèrement imprévisible qu'il doive monter dans un autre dossier avant de produire sa sortie, mais il devrait bien s'asseoir à côté des dossiers de ressources que vous avez déjà là.

+0

Le répertoire 'build' contient le contenu généré par la machine qui est généré à partir du code source - ce seront des binaires, des bibliothèques, des actifs d'exécution - tout ce qui finit chez un client. En effet, 'src' contient le code source du programme, et' build' contient aussi Makefiles que 'make' utilise pour générer le contenu de ce répertoire. 'src' est lié au système de contrôle de la source (git), rien d'autre n'est. Cependant, je me demandais si Makefiles serait aussi un code source car une grande partie de mes Makefiles est écrite à la main et contient beaucoup d'informations qui sont essentielles pour une compilation réussie. – amn

+0

@amn: vos makefiles ne sont pas actuellement sous contrôle de source? –

+0

@Tom non, ils ne le sont pas. Ce qui fait partie de la raison pour laquelle j'envisage de les déplacer. Je ne pense pas que le code source ait besoin de contrôle de version non plus. Et mes makefiles deviennent de plus en plus complexes à mesure que le projet se développe et contient des informations précieuses. Par exemple je construis un fichier SWF Adobe Flash à partir d'un répertoire entier de code source. Cependant, les dimensions SWF (largeur, hauteur, framerate) sont spécifiées comme des options de ligne de commande pour le compilateur, et ne font donc pas partie du code source, alors que sans doute elles constituent aussi le projet, n'est-ce pas? – amn

1

La pratique standard consiste à créer un Makefile en dehors de votre répertoire src /, qui construit votre projet et dans ce répertoire src /, un autre Makefile construit des modules individuels. Cela dit, je pense que dans votre cas, il suffit de garder votre Makefile uniquement dans src/though. Je ne suis pas sûr si cela s'applique, mais vous pourriez vouloir regarder le paquet de GNU autoconf, il est utilisé exactement pour ce genre de chose.