Génération en source vs génération hors source

10

Dans mon développement (principalement C ++), j'ai longtemps adhéré à l'utilisation de builds out-of-source. Autrement dit, ma source se trouve généralement dans un /project/srcrépertoire et les versions vivent dans un /project/build/bin/release,/project/build/bin/debug répertoires. J'ai fait cela car il garde mes répertoires source propres des fichiers intermédiaires, j'ai un emplacement pour tous mes binaires, l'empaquetage est plus facile, le nettoyage est plus facile et le contrôle de version est plus facile. (Ai-je manqué quelque chose?)

J'hérite d'un (grand) projet maintenant qui utilise des builds en source. Quelle est la motivation de ce type de structure et quels sont ses avantages? (Je suis surtout préoccupé par les raisons de niveau technique par rapport aux types de raisons de préférence personnelle.)

J'espérais que la «conception logicielle C ++ à grande échelle» de Lakos aurait pesé dessus, mais je l'avais raté si c'était le cas.

DiB
la source
2
Mes excuses. Je recherche «Dans les versions source, améliorez« x »» ou «elles aident à garantir que« y »» ou «les tests automatisés peuvent ensuite« z »». Pas une diatribe. Je ne veux surtout pas entrer dans une guerre d'opinions ici!
DiB
10
Les builds en source sont une malédiction que vous devez à la paresse de votre prédécesseur. Ils sont horribles pour tout (contrôle de source, construction croisée, recherche de texte, etc.) mais sont incroyablement faciles à créer à l'aide de makefiles nus. Désolé, c'était une diatribe. Mais objectif .
1
Qu'entendez-vous exactement par builds "in-source"? Quelque chose comme /project/src/bin/release, ou vraiment tous les fichiers intermédiaires et de sortie dans /project/src? Ce dernier peut être en effet un gâchis s'il y a plus d'une dizaine de fichiers sources, le premier est ok.
Doc Brown
2
@Tibo, ce n'est pas seulement incroyablement facile avec les makefiles, mais cela semble être la valeur par défaut avec la plupart des IDE également (du moins lorsque j'ai vérifié la dernière fois il y a quelques années).
Bart van Ingen Schenau
4
@BartvanIngenSchenau Vraiment? quel IDE avez-vous utilisé dans ce cas? Qt ne fait pas cela, en fait, il semble mettre la construction aussi loin que possible de la source, Eclipse ne le fait pas, vous pourriez dire que Clion le fait, mais uniquement en conséquence de main.cpp étant initialement au niveau supérieur de votre projet, il crée toujours un répertoire de construction cmake distinct de votre source à ce niveau supérieur. Je crois que MSVS est similaire à Clion à cet égard également.
2018

Réponses:

9

Après avoir demandé à la communauté ici et poursuivi ma recherche en ligne, je n'ai pas été en mesure de trouver une justification technique importante pour l'utilisation de builds en source. (Il existe de nombreux exemples de raisons de les éviter.)

La seule raison objective que j'ai trouvée (comme mentionné dans le commentaire de @BartvanIngenSchenau) est que les builds en source sont parfois par défaut par un système de build. En raison de cette valeur par défaut, ils ne nécessitent aucune surcharge dans le temps de configuration, ce qui peut être parfaitement acceptable pour un très petit projet (ou scratch).

DiB
la source