2011-01-10 2 views
15

Ich versuche, gtest auf Visual Studio 2010 zu erstellen. Nach dem Konvertieren der Lösungsdatei habe ich versucht, zu erstellen, und ich habe die folgenden Warnmeldungen erhalten.

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 

Die Meldung sagt, dass ich Setup Variablen müssen $(OutDir), $(TargetName) und $(TargetExt) zusammen mit Eigenschaftswerten in %(Lib.OutputFile) angegeben.

Wie kann ich das mit Visual Studio (vor allem VS 2010) tun?

+0

Überprüfen Sie Folgendes: [Wie MSB8012 (Lib.OutputFile) zu beheben?] (Http://connect.microsoft.com/VisualStudio/feedback/details/523864/how-to-fix-msb8012-lib-outputfile) [Visual Studio 2010 - Makro $ (TargetName)] (http://social.msdn.microsoft.com/Forums/en/vcprerelease/thread/3c03e730-6a0e-4ee4-a0d6-6a5c3ce4343c) –

Antwort

3

Die Warnung ist unecht - vorausgesetzt, Sie Google-Test verwenden, es funktioniert gut

Sie können es aber weggehen. Klicken Sie mit der rechten Maustaste auf das problematische Projekt und wählen Sie Eigenschaften. Wählen Sie "Librarian" in der Baumansicht auf der linken Seite und ändern Sie den "Output File" -Punkt auf der rechten Seite, indem Sie auf das Kästchen neben der Ausgabedatei klicken und "Über Eltern- oder Projektstandardwerte übernehmen" auswählen.

+4

Das ist nicht die richtige Antwort. Dies * ändert * den Namen der Ausgabedatei, sowohl der Debug- als auch der Release-Build der .lib heißen jetzt gtest. Was immer zuletzt erstellt wurde, überschreibt die Datei. Es brachte das OP in Schwierigkeiten, als er den Release-Build der .lib mit dem Debug-Build des Codes, den er testen wollte, verlinkte. Er hat diese Frage später gelöscht, ich nehme an, er hat es herausgefunden. –

+1

@Hans: Nicht wahr. Visual Studio speichert diese Dateien bereits in separaten Ordnern. Das zusätzliche "d" ist nur erforderlich, wenn Sie die libs in ein einzelnes Verzeichnis kopieren möchten. –

+0

Was ist, wenn ich möchte, dass der Name gleich bleibt? Ich denke, die Antwort von @HansPassant ist richtiger. – alariq

23

Ich sehe es. Klicken Sie mit der rechten Maustaste auf das Projekt gtest, Eigenschaften, Konfigurationseigenschaften, Allgemein. Stellen Sie sicher, dass die Debug-Konfiguration ausgewählt ist (oben links). Ändern Sie die Eigenschaft Target Name in

Beachten Sie das hinzugefügte "d", um den Namen von Gtest zu Gtestd zu ändern. Die Warnung ist ansonsten gutartig.

2

Diese Art von Fehlern tritt normalerweise auf, wenn Sie ein altes Projekt auf eine neue Version von Visual Studio aktualisieren (wie in Ihrem Fall auf VS2010) und wenn Projekteinstellungen manuell geändert wurden (z. B. Ändern des ausführbaren Namens). Wir wissen, dass VS2010 diese Makros $(ProjectName)$(TargetName)$(OutDir)$(TargetExt) verwendet, um Ausgabe-/Debugausgaben zu steuern, aber es ist oft ein Geheimnis, wo man sie ändern kann. Als Alternative können Sie den Namen der Ausgabedateien direkt über Projekt >> Eigenschaften ändern. Das bedeutet, dass wir jetzt die Ausgabedateien für Debug und Release-Build separat ändern müssen und falls es irgendwelche Abhängigkeiten gibt, erhalten wir einen Fehler wie This may cause your project to build incorrectly..

Diese Makros/Eigenschaften sind VS2010-Standardwerte, Sie können sie jedoch selbst in .vcproj-Dateien festlegen, indem Sie sie im Editor bearbeiten. Beachten Sie zuerst, dass die Eigenschaft in der .vcproj-Datei zuerst gesucht wird, wenn sie dort ihren Wert ändert, wenn nicht wie unten definiert.

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

oben Ich habe eine neue <property group> definiert diese Werte zu halten, aber Sie können sie überall definieren. Ich definiere dies am Anfang der Datei direkt nach der Debug/Release-Konfigurationsgruppe, so dass es überall sichtbar ist. Stellen Sie sicher, dass die Projekteigenschaften ordnungsgemäß eingerichtet sind, um sie ordnungsgemäß zu verwenden (sie sollten die Standardeinstellungen von VS2010 sein). Wenn Sie sie geändert haben, sollten Sie sie aus einem neuen Testprojekt kopieren. Sie können natürlich auch die anderen Makros hinzufügen, für die Sie Werte in der obigen Gruppe festlegen möchten.

Sie können die neuen Werte dieser Makros auch über Projekteigenschaften überprüfen. Klicken Sie zum Beispiel in Konfigurationseigenschaften >> Allgemein und dann in das Feld 'Zielname'. Wählen Sie Bearbeiten. Es wird ein Dialogfeld mit der Schaltfläche 'MACROS >>' geöffnet. Klicken Sie darauf, und es zeigt Ihnen, was der Wert jedes Makros ist. Es sollte die neuen Werte, die Sie in der .vcproj-Datei festlegen, korrekt wiedergeben.

+0

Danke. Ich habe lange gesucht, um diese Build-Zeit-Symbole zu setzen. –

+0

@zadane - verzeihe meine Ignoranz ... Für VS2010 sind 'OutputDirectory' und' OutputFile' nach VCUpgrade korrekt eingestellt. TargetName und TargetExt fehlen jedoch. Wie können wir Ihren Trick verwenden, um 'TargetName' und' TargetExt' beispielsweise zu VS2005 hinzuzufügen, so dass es ein VS2010-Upgrade überlebt (und die Dinge "funktionieren" nur für einen VS2010-Benutzer)? Siehe auch [Wie ändere ich TargetName und TargetExt, indem ich das XML der Projektdatei ändere?] (Http://stackoverflow.com/q/33058709) – jww

+0

@jww der von Ihnen angegebene Link funktioniert nicht mehr. – zar

8

glaube ich niemand die richtige Antwort hat, ich löste diese Art und Weise: in Projekteigenschaften Seiten, überprüfen, ob linker->General->Output file Spiel configuration properties->General->target name & configuration properties->General->target extension.

Sie müssen kein 'd' hinzufügen, ist natürlich einfacher auf Inherit from parent or project defaults eingestellt, für alle 3 Variablen.

Beispiel:

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

dann:

Configuration Properties → General → Target Name = "myproject" 

configuration properties → General → Target Extension = ".exe" 
0

Der Hintergrund ist, dass Microsoft die Bedeutung des $ (Targetname) Makro geändert. Es bedeutete früher "welchen Dateinamen Sie auch in Linker | Ausgabedatei abzüglich der Erweiterung eingeben". Sie haben es in "standardmäßig den Namen Ihres Projekts" geändert. (Das sollten Sie meiner Meinung nach nie tun, sie hätten ein neues Makro hinzufügen sollen).

Während VS2008 und früher den Dateinamen aus der Linker-Einstellung analysieren konnten, waren sie offensichtlich nicht in der Lage, ihn bei der Migration zu neueren Versionen zu analysieren, wodurch unsere Konfigurationen unterbrochen wurden.

Die Warnung selbst ist wahrscheinlich nicht wichtig, aber wenn Sie $ (TargetName) verwenden, sagen Sie, indem Sie es an eine Batch-Datei übergeben, bricht diese Änderung Ihren Batch-Prozess.

Für uns bestand die Lösung darin, den Dateinamen (minus Erweiterung) von Linker | zu kopieren Ausgabedatei nach Allgemein | Zielname und dann Linker | Ausgabedatei "von Eltern/Standard erben". Dies liegt daran, dass wir Suffixe wie "d" (für Debug), "u" für Unicode, _64 für 64-Bit usw. verwenden.

Auf der anderen Seite, wenn Ihre Ausgabedatei immer mit dem Namen des Projekts übereinstimmt, dann müssen Sie nur Linker | einstellen Ausgabedatei "standardmäßig erben" und Sie sind im Prinzip fertig - vorausgesetzt, das Ausgabeverzeichnis für Ihre kompilierte Datei stimmt mit General | überein Ausgabe Verzeichnis.

Diese Änderung ist absolut ärgerlich, weil es buchstäblich hunderte von Einstellungen bewegt, alles wegen der bloßen Faulheit von Microsoft, soweit ich sehen kann.

Verwandte Themen