2010-10-17 5 views
2

Je viens de créer un projet de bibliothèque «C++ Standard Dynamic» en utilisant Xcode et compilé en utilisant LLVM 2.0. Je remarque que le fichier PCH contient la ligne #include <iostream> mais le fichier Test.cp inclut également cette instruction #include <iostream>.Problème Xcode PCH - Éléments dans PCH non inclus dans les fichiers source

La chose étrange est que, en supprimant la déclaration Test.cp, la génération échoue avec l'erreur Semantic Issue – Use of undeclared identifier 'std' malgré le fait que cette déclaration est également inclus dans le PCH.

Pourquoi le PCH ne fonctionne-t-il pas? Y a-t-il un paramètre qui me manque? Je n'ai jamais rien fait avec eux auparavant (puisqu'ils fonctionnent toujours), donc je ne suis pas sûr de ce qui ne fonctionne pas, même avec un tout nouveau projet.

+1

XCode 4 est toujours sous NDA, non? Vous devriez visiter le forum des développeurs Apple pour cela. – Eiko

Répondre

-1

Les en-têtes précompilés sont utilisés pour accélérer la compilation. Ils n'ont aucun autre effet, en particulier vous devez toujours inclure les en-têtes là où vous en avez besoin.

Éditer - Dans Xcode, le fichier pch est en réalité un préfixe d'en-tête qui est précompilé (avec la configuration par défaut du projet). Vérifiez les paramètres de construction GCC_PRECOMPILE_PREFIX_HEADER et GCC_PREFIX_HEADER.

+0

Hmmm ... ce n'est pas ce que j'ai vu. En particulier, le fichier PCH généré pour un tout nouveau projet Cocoa est le suivant: '#ifdef __OBJC__ #import # endif'. Si je supprime le fichier '#import ' de chaque fichier d'en-tête, il fonctionne malgré le fait que le fichier .pch soit le seul endroit où Cocoa est inclus. Est-il possible que ce comportement (le PCH fonctionne comme une sorte d '"en-tête global") soit propre aux projets Cocoa? –

+0

de [l'entrée de Wikipedia] (http://en.wikipedia.org/wiki/Precompiled_header): "Une caractéristique connexe est l'en-tête de préfixe, qui est un fichier qui est automatiquement inclus par le compilateur sans nécessiter l'utilisation d'un compilateur Les en-têtes de préfixe sont généralement précompilés, mais tous les en-têtes précompilés ne sont pas des en-têtes de préfixe. " Vous ne savez pas pourquoi XCode traite l'en-tête précompilé comme un en-tête de préfixe. – Aleph7

+0

Huh ... c'est étrange. J'ai utilisé le fichier .pch à un moment donné comme en-tête de préfixe, et cela a fonctionné, mais maintenant je ne peux pas comprendre comment je l'ai fait ... c'était il y a longtemps. Sauf si c'était la valeur par défaut. De toute façon, merci pour votre aide. J'ai fini par mettre les déclarations au début de chaque fichier; Ce n'est pas si grave. –

1

Supprimez les données dérivées (fenêtre Organiseur, onglet Projets, sélectionnez votre projet) pour que XCode reconstruise l'index pour PCH. En outre, si vous utilisez des tests unitaires, il existe un PCH distinct pour la cible UnitTests. Assurez-vous que cela inclut également les importations requises.

Questions connexes