2010-04-13 6 views
1

Donc je suis assez nouveau à Qt, et je viens d'hériter d'un projet de quelqu'un d'autre qui est aussi nouveau à Qt. Il n'est pas là cette semaine. Nous utilisons Visual Studio 2008 et la dernière version de Qt est installée (4.6.2).Qt moc failure sans un message d'erreur

Le projet s'appuie sur la machine de mon collègue, et je peux obtenir le projet de svn et le construire directement. Mais dans toutes les autres circonstances, il refuse de construire sur ma machine, et cela ne me donne pas beaucoup d'explications pourquoi. Même si je fais juste un 'build clean' puis un 'build' ça ne marche pas. Toute légère modification le fera échouer.

Lorsque je tente de construire l'ensemble du projet, je reçois le message d'erreur:

1> Moc'ing MatrixTypeInterface.h ... 1> moc. Impossible de créer \ GeneratedFiles \ Debug \ moc_MatrixTypeInterface . cpp, \ GeneratedFiles \ Debug \ moc_matrixtypeinterface.cpp 1> projet: erreur PRJ0019: un outil a renvoyé un code d'erreur "Moc'ing MatrixTypeInterface.h ..."

L'outil moc doesn ne donnez aucune sorte de message d'erreur quant à pourquoi il ne fonctionne pas, et j'ai perdu la plupart d'hier en essayant de comprendre pourquoi. J'ai eu la commande que VS utilisait pour appeler moc, et je suis entré dans la ligne de commande moi-même. Il n'a rien écrit à l'écran.

Des idées?

Répondre

1

J'ai finalement trouvé la réponse. Mon collègue était de retour au bureau aujourd'hui, et j'ai utilisé le journal de construction de sa machine pour obtenir sa commande moc complète (environ 4 lignes). Nos commandes moc étaient fondamentalement les mêmes sauf à la toute fin. Sa commande s'est terminée en:

-o ". \ GeneratedFiles \ $ (ConfigurationName) \ moc _ $ (InputName).cpp "

Ma commande est terminée par:

-o" \ GeneratedFiles \ $ (ConfigurationName) \ moc _ $ (InputName) Cpp, \ GeneratedFiles \ Debug \ moc_matrixtypeinterface.cpp »

..

j'ai vérifié l'étape de génération personnalisée pour ce fichier et supprimé le bit excès. Après que le fichier compilé bien. Je ne sais pas comment ou pourquoi qt a décidé d'ajouter à cette friandise supplémentaire, mais il l'a fait.

Merci pour votre aide les gars. Certains d'entre vous soupçonnaient qu'il s'agissait d'un problème de système de fichiers, et en effet un point-virgule n'est pas autorisé dans un nom de fichier Windows. Mais je pense que la cause première était Qt créant la mauvaise chaîne de compilation.

J'accepte ma propre réponse dans l'espoir qu'elle aidera quelqu'un d'autre.

1

Il s'agit probablement d'une erreur de système de fichiers, vous n'avez probablement pas de dossier "GeneratedFiles" ou vous ne disposez pas des autorisations appropriées.

J'ai rencontré des problèmes lorsque différentes versions du fichier moc et du complément utilisaient "Généré" ou "Fichiers générés" ou "Fichiers générés" pour le dossier. Vérifiez les paramètres sur toutes les étapes de construction.

+0

Tous les chemins de fichiers sont corrects et toutes les autorisations de fichiers sont correctes. J'ai vérifié tous mes paramètres de projet/construction par rapport au projet de mon collègue hier, et je n'ai rien trouvé de différent. Il n'est pas ici aujourd'hui, donc je ne peux rien vérifier de nouveau. –

0

Il est possible que votre fichier .vcproj soit corrompu. J'ai eu ce problème auparavant qui résultait de l'existence de différentes versions de Qt et le complément Qt VS a fini par corrompre mes fichiers .vcproj. Pendant un moment, j'ai dû corriger manuellement le fichier .vcproj (My AdditionalDependencies = "..." ligne a été permutée et coupée pour divers fichiers d'en-tête qui devaient être mocataires, je les corrigeais manuellement pour chaque nouvel entête besoin d'être mocqué).

Une réinstallation propre de Visual Studio + Qt + Qt add-on a permis de résoudre ce problème. Vérifiez votre fichier .vcproj et voyez si c'est logique. Etes-vous sûr que vos chemins de fichier sont corrects et existent avant que moc s'exécute?

0

Puisqu'il semble que les chemins relatifs sont fournis à moc, je trouverais ce que le répertoire de travail de moc est quand il s'exécute.

Comment votre fichier .vcproj a-t-il été généré? Qmake a-t-il été utilisé? Ou cmake? Ou était-ce à zéro?