web-dev-qa-db-fra.com

Comment définir $ (OutDir), $ (TargetName), $ (TargetExt) et% (Lib.OutputFile) avec Visual Studio?

J'essaie de créer gtest sur Visual Studio 2010. Après avoir converti le fichier de solution, j'ai essayé de créer et j'ai reçu les 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 indique que je dois configurer les variables $(OutDir), $(TargetName) et $(TargetExt), ainsi que les valeurs de propriété spécifiées dans %(Lib.OutputFile).

Comment puis-je faire cela avec Visual Studio (en particulier VS 2010)?

17
prosseek

L'avertissement est faux - en supposant que vous utilisez Google Test, cela fonctionne très bien

Vous pouvez cependant le faire disparaître. Cliquez avec le bouton droit sur le projet incriminé et sélectionnez les propriétés. Sélectionnez "Bibliothécaire" dans l'arborescence sur le côté gauche, et modifiez l'élément "Fichier de sortie" sur la droite en cliquant sur la case à côté du fichier de sortie et en sélectionnant "Hériter des valeurs par défaut du parent ou du projet".

3
Billy ONeal

Je le vois. Cliquez avec le bouton droit sur le projet gtest, Propriétés, Propriétés de configuration, Général. Assurez-vous que la configuration de débogage est sélectionnée (combo en haut à gauche). Remplacez la propriété Nom cible par

 $(ProjectName)d

Notez le "d" ajouté pour changer le nom de gtest en gtestd. L'avertissement est par ailleurs bénin.

27
Hans Passant

Je pense que personne n'a la bonne réponse, j'ai résolu de cette façon: dans les pages de propriétés du projet, vérifiez si linker->General->Output file rencontre configuration properties->General->target name & configuration properties->General->target extension.

Vous n'avez pas besoin d'ajouter de "d", bien sûr, il est plus simple de définir Inherit from parent or project defaults, pour les 3 variables.

Exemple:

Linker → General → Output File = "myproject.exe"

puis:

Configuration Properties → General → Target Name = "myproject"

configuration properties → General → Target Extension = ".exe"
8
user3630527

Ce type d'erreurs survient généralement lors de la mise à niveau d'un ancien projet vers une nouvelle version de Visual Studio (comme dans votre cas vers VS2010) et également si les paramètres du projet peuvent avoir été modifiés manuellement (par exemple, changer le nom de l'exécutable). Nous savons que VS2010 utilise ces macros $(ProjectName)$(TargetName)$(OutDir)$(TargetExt) pour contrôler les sorties de libération/débogage, mais il est souvent difficile de les modifier. Nous avons généralement recours au changement de nom des fichiers de sortie directement via Project >> Properties. Cela signifie que nous devons maintenant modifier les fichiers de sortie séparément pour le débogage et la version finale et s'il y avait des dépendances, nous obtiendrons une erreur comme This may cause your project to build incorrectly..

Ces macros/propriétés sont des valeurs par défaut VS2010 mais vous pouvez les définir vous-même dans des fichiers .vcproj en les modifiant dans le bloc-notes. Remarquez d'abord la recherche de la propriété dans le fichier .vcproj, si c'est là que changez sa valeur, sinon définissez-la comme ci-dessous.

  <PropertyGroup Label="My Values">
    <ProjectName>New_Project_Name</ProjectName>
  </PropertyGroup>

Ci-dessus, j'ai défini un nouveau <property group> pour conserver ces valeurs mais vous pouvez les définir n'importe où. Je le définis en haut du fichier juste après le groupe de configuration de débogage/libération afin qu'il soit visible partout. Assurez-vous que les propriétés de votre projet sont correctement configurées pour les utiliser correctement (elles doivent correspondre aux paramètres par défaut du VS2010). Si vous les avez modifiés, vous devez les copier à partir d'un nouveau projet de test. Vous pouvez bien sûr ajouter également les autres macros pour lesquelles vous souhaitez définir des valeurs dans le groupe ci-dessus.

Vous pouvez également vérifier les nouvelles valeurs de ces macros via les propriétés du projet. Par exemple, cliquez sur Propriétés de configuration >> Général et dans la zone "Nom cible". Sélectionnez modifier. Il fera apparaître une boîte de dialogue avec le bouton 'MACROS >>'. Cliquez dessus et il vous montrera quelle est la valeur de chaque macro. Il doit refléter correctement les nouvelles valeurs que vous définissez dans le fichier .vcproj.

2
zar

J'essayais juste de compiler une application dans Visual Studio 2019 que j'avais compilée pour la dernière fois Visual Studio 2005 . J'ai rencontré le même avertissement.

J'ai pensé montrer ce que j'ai fait visuellement avec des captures d'écran.

Nom de la solution v Nom de la cible

Comme vous pouvez le voir, mes variables ont toutes deux été définies sur Importer du texte :

Image 1

J'aurais pu simplement définir la $(TargetName) sur ImportText pour résoudre mon problème. Cependant, nous laisserons ces valeurs telles quelles.

Éditeur de liens/fichier de sortie général

Voici comment j'ai configuré le fichier de sortie:

Image 2

Notez que j'avais remplacé le nom de la cible de sortie par ImportText . C'était il y a plus de 10 ans et je n'avais pas autant d'expérience.

Nom général/cible

Donc tout ce que j'avais à faire était de faire le même ajustement ici:

Image 3

Maintenant, il compile le fichier.

2
Andrew Truckle

L'arrière-plan est que Microsoft a changé la signification de la macro $ (TargetName). Cela signifiait "quel que soit le nom de fichier que vous mettez dans Linker | Fichier de sortie, moins l'extension". Ils l'ont changé en "par défaut, le nom de votre projet". (C'est quelque chose que vous ne devriez jamais faire, à mon avis; ils auraient dû ajouter une nouvelle macro).

Alors que VS2008 et les versions antérieures ont pu analyser le nom de fichier hors du paramètre de l'éditeur de liens, apparemment, ils n'ont pas pu l'analyser lors de la migration vers des versions plus récentes, laissant nos configurations interrompues.

L'avertissement lui-même n'est probablement pas important, mais si vous utilisez $ (TargetName), par exemple en le transmettant à un fichier batch, cette modification interrompra votre processus batch.

Pour nous, la solution a été de copier le nom de fichier (extension moins) de Linker | Fichier de sortie vers général | Nom cible, puis définissez Linker | Fichier de sortie à "hériter du parent/par défaut". C'est parce que nous utilisons des suffixes comme "d" (pour le débogage), "u" pour Unicode, _64 pour 64 bits et ainsi de suite.

D'un autre côté, si votre fichier de sortie correspond toujours au nom du projet, alors tout ce que vous avez à faire est de définir Linker | Fichier de sortie à "hériter par défaut" et vous avez terminé, en principe - à condition que le répertoire de sortie que vous souhaitez pour votre fichier compilé corresponde à Général | Répertoire de sortie.

Ce changement est absolument exaspérant car il implique de déplacer littéralement des centaines de paramètres, tout cela à cause de la pure paresse de Microsoft, à ma connaissance.

1
David Pritchard

Tout comme Hans Passant l'a publié, vous devez modifier la propriété TargetName manuellement. C'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

1
RickeyShao