Comment définir $(OutDir), $(TargetName), $(TargetExt), et %(Lib.OutputFile) avec Visual Studio?
Je suis en train de construire gtest sur Visual Studio 2010. Après la conversion du fichier de solution, j'ai essayé de construire, et j'ai eu des messages d'avertissement suivants.
Warning 1 warning MSB8012:
TargetPath(C:\Users\sucho\Desktop\gtest-1.5.0\msvc\gtest/Debug\gtest.lib) does not match
the Library's OutputFile property value (C:\Users\sucho\Desktop\gtest-1.5.0\msvc\gtest\
Debug\gtestd.lib).
This may cause your project to build incorrectly.
To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property
values match the value specified in %(Lib.OutputFile).
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets
Le message dit que j'ai besoin pour l'installation de variables $(OutDir)
, $(TargetName)
et $(TargetExt)
, en collaboration avec les valeurs de la propriété spécifiée dans %(Lib.OutputFile)
.
Comment puis-je faire avec Visual Studio (surtout par rapport à 2010)?
OriginalL'auteur prosseek | 2011-01-10
Vous devez vous connecter pour publier un commentaire.
L'avertissement est fausse -- en supposant que vous êtes à l'aide de Google Test, il fonctionne très bien
Vous pouvez la faire disparaître. Clic droit sur la délinquance projet et sélectionnez propriétés. Sélectionnez "Bibliothécaire" dans l'arborescence sur le côté gauche, et de modifier le Fichier de Sortie de l'élément sur la droite en cliquant sur la case à côté du fichier de sortie, et en sélectionnant "Hérite de l'objet parent ou d'un projet par défaut".
Pas vrai. Visual Studio met déjà ces fichiers dans des dossiers séparés. Le "d" n'est nécessaire que si vous décidez de copier les libs dans un seul répertoire.
que faire si je veux le nom de séjour même? Je pense que la réponse fournie par @HansPassant est plus correct.
1. Je n'ai aucune idée de pourquoi vous voulez le faire. 2. Même si vous le faites, Hans réponse et la mienne essentiellement dire la même chose.
c'est un problème courant lors de la conversion à partir d'une solution version à l'autre. Une raison de plus est si c'est le cas, Alors vous aurez également à modifier manuellement le Débogage->Commande. Parce qu'il est fixé à $(TargetPath) par défaut. Et le problème, c'est que $(TargetName) (qui est la partie de $(TargetPath)) n'est pas le même que le fichier de sortie.
OriginalL'auteur Billy ONeal
Je le vois. Cliquez-droit sur le gtest projet, Propriétés, propriétés de Configuration Générale. S'assurer que la configuration de Débogage est activée (en haut à gauche de combo). Changer le Nom de la Cible de la propriété à
Note l'ajout de "d" pour changer le nom de gtest à gtestd. L'avertissement est autrement bénignes.
OriginalL'auteur Hans Passant
Je pense que personne n'a la bonne réponse, j'ai résolu de cette façon: dans les propriétés du projet pages, vérifiez si
linker->General->Output file
matchconfiguration properties->General->target name
&configuration properties->General->target extension
.Vous n'avez pas besoin d'ajouter "d", bien sûr, est plus simple à
Inherit from parent or project defaults
, pour tous les 3 variables.Exemple:
alors:
OriginalL'auteur user3630527
Ce genre d'erreurs surviennent habituellement lors de la mise à niveau d'ancien projet pour la nouvelle version de Visual Studio (comme dans votre cas à VS2010) et aussi si le projet peut que les paramètres ont été modifiés manuellement (par exemple, l'évolution du nom de l'exécutable). Nous savons VS2010 utilise ces macros
$(ProjectName)
$(TargetName)
$(OutDir)
$(TargetExt)
de contrôle de la release/debug des résultats, mais il est souvent mystère, où les modifier. Nous que la station typique de modifier le nom des fichiers de sortie directement par le biais de Projet >> Propriétés. Cela signifie que nous avons maintenant de modifier les fichiers de sortie séparément pour le debug et release construire et si il n'y a aucune dépendance, nous allons obtenir une erreur, commeThis may cause your project to build incorrectly.
.Ces macros/propriétés sont VS2010 par défaut, mais vous pouvez définir vous-même .vcproj fichiers en modifiant dans le bloc-notes. Note de recherche, d'abord pour le bien de la .vcproj fichier tout d'abord, si son là que le changement de sa valeur, si ce n'est la définissent comme ci-dessous.
Ci-dessus, j'ai défini une nouvelle
<property group>
de garder ces valeurs, mais vous pouvez définir n'importe où. Je définir ce à le haut du fichier, juste après debug/release groupe de configuration de sorte que son visible partout. Assurez-vous que votre projet de propriétés sont correctement le programme d'installation pour les utiliser correctement (ils devraient être ce qu'il est VS2010 paramètres par défaut). Si vous avez changé d'eux, vous devez les copier à partir de projet de test. Vous pouvez bien sûr ajouter les autres Macros que vous souhaitez définir des valeurs dans le groupe ci-dessus.Vous pouvez également vérifier les nouvelles valeurs de cette macros par les propriétés du projet. Par exemple, cliquez sur dans Propriétés de Configuration >> Général et que dans "Nom de la Cible". Sélectionnez modifier. Il fera apparaître une boîte de dialogue avec le bouton
'MACROS >>'
. Cliquez sur cela et il va vous montrer ce que la valeur de chaque macro est. Il doit refléter correctement les nouvelles valeurs que vous définissez .vcproj fichier.pardonnez mon ignorance... Pour VS2010,
OutputDirectory
etOutputFile
sont définies correctement après VCUpgrade. Cependant,TargetName
etTargetExt
sont manquants. Comment pouvons-nous utiliser votre astuce pour ajouterTargetName
etTargetExt
à, disons, VS2005 de sorte qu'il survit à un VS2010 de mise à niveau (et des choses "fonctionne" pour un VS2010 utilisateur)? Voir aussi Comment modifier TargetName et TargetExt en modifiant le fichier de projet XML?le lien que vous avez fourni ne fonctionne plus.
Il semble que ce système est supprimé en raison de trop peu de points de vue; et pas de réponses ou des commentaires.
OriginalL'auteur zar
Tout comme Hans Passant posté, vous avez besoin de modifier la propriété TargetName manuellement. Ce qui est différent entre VS2005/2008 et VS2010. Veuillez vous référer à http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/3c03e730-6a0e-4ee4-a0d6-6a5c3ce4343c
OriginalL'auteur RickeyShao
Le fond du problème est que Microsoft a changé le sens de l' $(TargetName) macro. Il a utilisé pour dire "quel que soit le nom que vous avez mis dans l'éditeur de liens | le Fichier de Sortie, moins l'extension". Ils l'ont changé "par défaut, le nom de votre projet". (C'est quelque chose que vous ne devriez jamais faire, de mon point de vue; ils ont ajouté une nouvelle macro).
Alors que VS2008 et antérieures ont été en mesure d'analyser le nom de fichier de l'éditeur de liens paramètre, apparemment, ils n'ont pas été en mesure d'analyser la migration vers des versions plus récentes, en laissant nos configurations cassé.
L'avertissement lui-même n'est probablement pas important, mais si vous utilisez $(TargetName), dire en la transmettant à un fichier de commandes, ce changement va briser votre processus de traitement par lots.
Pour nous, la solution a été de copier le nom du fichier (sans extension) à partir de l'éditeur de liens | Fichier de Sortie Général | Nom de la Cible, puis définissez l'éditeur de liens | Fichier de Sortie "hérite de l'objet parent/par défaut". C'est parce que nous utilisons des suffixes comme "d" (pour débogage), "u" pour l'Unicode, _64 pour 64 bits et ainsi de suite.
D'autre part, si votre fichier de sortie correspond toujours au nom du projet, puis tout ce que vous devez faire est d'installer l'éditeur de liens | Fichier de Sortie "héritent par défaut" et vous avez terminé, en principe (à condition que le répertoire de sortie que vous voulez pour votre fichier compilé correspond Général | Répertoire de Sortie.
Ce changement est absolument exaspérant parce qu'il implique le déplacement de centaines de paramètres, le tout, à cause de la paresse de Microsoft, aussi loin que je peux voir.
OriginalL'auteur David Pritchard