J'envisage de lancer un nouveau projet en C++ - à titre personnel dans un premier temps - et j'étudie les systèmes de construction disponibles. Il semblerait que la réponse soit "Beaucoup, et ils sont tous affreux".
Les fonctionnalités dont j'ai spécifiquement besoin sont les suivantes :
- Support C++11
- multiplateforme (Linux comme cible principale, mais capable de construire au moins sur Windows également)
- Support décent des tests unitaires
- Prise en charge de plusieurs modules pour séparer le code
- Support pour la génération de code (en utilisant asn1c ou protobuf - pas encore sûr à 100%)
- Facile à entretenir
Maintenant, je sais que je peux faire 1-4 de ces choses en utilisant CMake et Autotools assez facilement. Probablement aussi avec SCons et Waf et quelques autres aussi. Le problème est que je n'ai jamais trouvé comment faire correctement la génération de code en les utilisant - c'est à dire des fichiers sources qui n'existent pas jusqu'à ce que le processus de construction soit lancé, donc des fichiers sources que le système de construction doit être capable de convertir en code exécutable mais qui ne sont pas réellement connus jusqu'à ce que la construction commence... (ASN1C en particulier génère des douzaines d'en-têtes et de fichiers sources qui doivent être capables de travailler ensemble, et le jeu réel de fichiers générés dépend du contenu de votre fichier asn) Il y a aussi le fait qu'aucun d'entre eux n'est particulièrement facile à maintenir - CMake et Autotools ont leur propre jeu énorme de scripts que vous devez gérer pour qu'ils fonctionnent, et Waf et Scons exigent que quiconque travaille avec eux ait une connaissance décente de python (je ne l'ai pas) pour travailler avec eux...
Quels sont les systèmes de construction recommandés pour ce type de projet ? Ou vais-je être coincé avec des fichiers make et des scripts pour le moment ?
11 votes
Il semblerait que la réponse soit "Beaucoup, et ils sont tous affreux". C'est aussi mon impression (avec l'ajout de "affreux de mon point de vue" ; je n'aime pas trop généraliser avec ce genre de termes). En fait, j'ai créé mon propre système pour cette raison précise, et il a mieux fonctionné que prévu puisqu'il fait ce que je veux, et comment j'ai toujours voulu que les choses fonctionnent. Pour quelque chose d'un peu moins chronophage, vous devrez probablement passer en revue les outils existants et en choisir un qui vous donne moins de maux de tête que les autres.
4 votes
Essayez tup .
0 votes
Voir aussi : stackoverflow.com/q/3349956
8 votes
Quel type de support C++11 attendez-vous d'un système de construction ? C'est quelque chose que vous obtenez du compilateur, le système de compilation n'analyse pas ou ne lit même pas les fichiers sources réels, il les transmet simplement à qui en a besoin, non ?
7 votes
C'est vrai, mais il serait bon de pouvoir dire au compilateur d'utiliser le support C++11. g++ a besoin d'un drapeau, clang d'un ensemble différent, msvc n'en a apparemment pas besoin, etc. De même, un support pour détecter quelles fonctionnalités de C++11 sont disponibles serait utile car cela diffère également entre les compilateurs...
0 votes
Je réalise que c'est une vieille question, mais pour les sources générées, je pense qu'un fichier "flag" peut être utilisé. Faites en sorte que la construction principale dépende du fichier "flag" et laissez la règle qui crée le fichier "flag" faire ce qui suit
generate_files and touch flag
. Ou, peut-être quelque chose de similaire à la façon dont les fichiers de dépendance sont générés pourrait être fait (inclure un .d pour chaque fichier asn. Laisser une règle de motif générer les fichiers .d. Les fichiers .d disentbinary: asn_gen1 asn_gen2
). Je me souviens d'avoir eu des problèmes dans le passé pour obtenir des fichiers .d générés lors de la première exécution, mais je pense que c'était dû à une erreur de logique.0 votes
@KerrekSB en tant que personne qui a utilisé Tup presque exclusivement, soyez prudent avec lui. Il perturbe le chargement des symboles lorsque vous essayez de déboguer !
0 votes
@Qix : Intéressant, merci. Je l'avais mentionné après m'être documenté sur le sujet suite à une recommandation, mais je ne l'ai pas essayé. C'est bon à savoir.
0 votes
Contrôle @KerrekSB cet autre commentaire que je viens de faire - comme avec tout système, il faut savoir dans quoi on s'engage :)
0 votes
SBC le seul et unique système de construction qui ne soit pas horrible.
0 votes
Il suffit d'utiliser
make
- simple et puissant.