2009-05-22 6 views
2

Inside .vcproj files Il existe une liste de tous les fichiers source dans votre projet. Comment pouvons-nous utiliser une macro pour spécifier le chemin d'accès à un fichier source?Utiliser une "macro utilisateur" dans .vcproj RelativePath

Si nous faisons cela:

<File 
    RelativePath="$(Lib3rdParty)\Qt\qtwinmigrate-2.5-commercial\src\qmfcapp.cpp"> 
</File> 

Le compilateur ne peut pas trouver le dossier:

qmfcapp.cpp 
c1xx : fatal error C1083: Cannot open source file: '.\$(lib3rdparty)\qt\qtwinmigrate- 2.5-commercial\src\qmfcapp.cpp': No such file or directory 

Comme vous pouvez le voir, notre projet compile dans plusieurs fichiers source de QT. QT vit dans un dossier de bibliothèques externes, et nous ne voulons pas coder en dur le chemin de notre projet dans ce dossier (nous avons une très grande solution)

+0

Où est défini $ (Lib3rdParty)? Est-il défini comme un chemin absolu ou est-il relatif au fichier de projet? Essayez de changer RelativePath en AbsolutePath pour voir quel effet il a. –

+0

Je ne pensais pas que AbsolutePath serait valide, car il ne figure pas dans le schéma fourni par microsoft pour le fichier de projet. –

Répondre

1

Essayer de définir une variable d'environnement pour « Lib3rdParty » à l'extrait de chemin relatif approprié.

+0

+1 Je n'avais pas considéré les variables d'environnement comme une option ici, merci! –

3

La solution normale est d'inclure le tiers inclut, libs et source dans le contrôle de source avec votre propre source, ainsi vous pouvez suivre des changements à vos dépendances de tiers avec votre source.

Si tel est le cas, vous devriez pouvoir utiliser un chemin relatif de chaque projet vers les fichiers source tiers.

Cependant, si votre solution est volumineuse et que les paramètres du projet sont compliqués, vous devriez regarder CMake, même si vous ne faites que construire sur Windows. CMake vous permet de décrire votre environnement de construction avec les paramètres communs spécifiés dans un seul endroit. Des cas plus complexes peuvent être traités avec des variables et des macros. Ensuite, il génère vos projets de studio visuel, ou makefiles à partir de cette description. Nous l'avons introduit pour supporter un port unix, et maintenant je l'utilise pour le développement de Windows uniquement.

Les projets VS sont vraiment maladroits à utiliser, ouvrant et fermant des boîtes de dialogue, définissant des choses pour le débogage et la libération. Chaque projet avec sa propre copie des paramètres, mais la plupart du temps la même chose que tous les autres projets.

+1

Merci d'avoir proposé une solution alternative ... Nous sommes actuellement très investis dans des dossiers de projets de studios visuels, ayant littéralement plus d'une centaine de projets actifs. Nous résolvons le problème des paramètres dupliqués que vous décrivez en utilisant des feuilles de propriétés, qui peuvent être partagées entre les projets. –

0

..il doit mentionner que l'utilisation de feuilles de propriétés se débarrasse de beaucoup de clunkyness si

+0

Les feuilles de propriétés sont en effet inestimables. Nous les utilisons beaucoup. La macro en question est définie dans un. –

+2

Essayez de définir "Définir cette macro comme variable d'environnement dans l'environnement de génération" dans la boîte de dialogue Ajouter une macro utilisateur. A travaillé pour moi sur VS2008. – Amnon

3

Si vous ajoutez un fichier existant à partir d'un lecteur différent, vous remarquerez qu'un chemin absolu est utilisé.

Au moins pour v8.00, les macros ne semblent pas être développées. J'ai essayé les formes de macro VC, Ant et OS - aucune n'a fonctionné.

Il existe toujours l'option de jonction de sysinternals, un chemin réseau mappé ou un fichier .lib avec une spécification de macro définie dans les chemins projet/global, include et lib. Même avec le paquet lib, vous devriez pouvoir entrer dans la source.

+0

Merci d'avoir pris le temps de répondre, et bienvenue à Stack Overflow;) –

Questions connexes