J'ai un grand projet QT, séparé sur plusieurs bibliothèques statiques (environ 70) et une application, et pour cela, j'utilise un fichier .pro avec le modèle de sous-résidents. p>
Pour accélérer le temps de compilation, je souhaite utiliser des en-têtes précompilés et constaté que l'utilisation de la précompiled_header sur chaque sous-projet fait l'affaire, mais que chaque projet compare l'en-tête précompilé séparément (et que l'une est la plus lente étape). p>
Il existe un moyen de "partager" l'en-tête précompilé entre tous les sous-projets incluses sur le modèle de sous-réprimés?, de sorte que l'en-tête précompilé peut être construit une fois et être utilisé par tous les sous-produits? P>
considère p>
5 Réponses :
Si chaque en-tête serait compilé séparément à sa propre pCH, cela pourrait alors fonctionner. Malheureusement, autant que je sache, dans des projets C ++, il n'y a qu'une seule unité de traduction pour les en-têtes précompilés pouvant être utilisés à l'échelle mondiale par projet. Eh bien, vous pouvez utiliser un fichier global pour tous vos projets, mais c'est-à-dire efficace: cela peut entraîner une augmentation des heures de construction, car chaque en-tête précompilé est modifié, tout doit être reconstruit. P>
L'idée est que l'en-tête précompilé ne changera pas, je veux mettre tous les trucs spécifiques QT et rien d'autre. Mais il y a de la manière avec qmake de faire ce fichier global?
Juste une suggestion - vous voudrez peut-être essayer d'utiliser Cmake. Il a à la fois un support QT et PCH, et il s'agit du support PCH actuel souffre du même problème. Les macros liées à la PCH entrent dans un fichier séparé pour comprendre et peuvent être réécrites de faire un seul fichier de gros pch pour de nombreux sous-dossiers. C'est comme ça que j'ai l'intention de résoudre le même problème pour mon projet QT. P>
Après une certaine expérimentation, je n'ai trouvé aucun moyen de partager un en-tête précompilé entre les sous-projets. Je pense que la justification de l'absence de cette fonctionnalité est que chaque sous-projet peut modifier des drapeaux de compilateur / préprocesseur qui feraient construire des en-têtes précompilés pour une sous-projet incompatible avec d'autres sous-projets. p>
L'en-tête de précompilisation partagée pourrait être utile pour certains projets simples où des drapeaux de compilateur sont également partagés, mais je suppose que la détection et la manipulation des écarts de cette maladie seraient trop tracas pour le QMake. P>
En cas de drapeaux de compilateur / préprocesseur très identiques pour divers sous-projets, comment l'atteindriez-vous? Un sous-projet générant la PCH et l'autre l'utiliser? Si oui, comment utiliser simplement la PCH pour les autres sous-projets? Merci :)
Pas de chemin officiel malheureusement. Vous pouvez utiliser des hacks cependant pour obtenir un support de PCH basique.
J'ai utilisé p> dans un projet qui crée simplement le fichier .pch, puis "simuler" le 2e la moitié de précompiled_header dans un fichier commun .pri pour les projets réels. Par exemple. Avec vs, vous utiliseriez quelque chose comme: p> Vous pouvez rencontrer différents problèmes, par exemple. p>
Merci pour cette bonne idée, est-il possible de le faire pour d'autres compilateurs comme Mingw / XCode?
Il n'y a aucun moyen de le faire si vous utilisez qmake.exe. QMake Binary a construit des drapeaux qui disent à créer (-YC) pCH pour chaque projet. Il n'y a aucun moyen de le couper. P>
Si vous avez résolu cela, je serais intéressé par la réponse
Malheureusement, je n'ai jamais trouvé la façon de le faire