2017-03-26 3 views
0

Also versuche ich gerade eine .lib Datei aus meiner exe zu erstellen, indem ich Visual Studio Build Skripte benutze, wie es die angenommene Antwort zu diesem Beitrag vorgeschlagen hat: Linking to multiple .obj for unit testing a console application. Grundsätzlich ist der Post-Build-Skript empfehlen sie in meinem Projekt Post-Build-Ereignis zu platzieren ist:Wie ich mein post-build script in Visual Studio korrekt einstelle

lib /NOLOGO /OUT:"$(TargetPath).lib" "$(ProjectDir)\$(Configuration)\*.obj" 

Hier ist, was meine aktuelle Verzeichnisstruktur wie folgt aussieht:

-Solution 
    - Project 
     -Source 
     .cpp files 
    - ProjectTester 
    - Solution.sln 

Also mein Befehl wie folgt aussieht:

Dies tut derzeit nichts, als ob Visual Studio dieses Buildskript vollständig ignoriert. Meine Fragen sind:

Was genau $ (TargetPath) .lib zu lösen?

und

Ist mein gegenwärtiges Verständnis dieser Build-Skript korrekt? Wenn ja, wie ändere ich dieses Skript, um zu tun, was ich will?

Update:

ich ein paar Räume im Zielpfad geändert haben und jetzt bekomme ich einen LNK1146 no argument specified with option /OUT: Fehler.

Antwort

1

Sie erwähnen nicht, mit welcher Version von Visual Studio Sie arbeiten. Aus dem Speicher ändert sich die Antwort nicht sehr, aber ich werde für Visual Studio 2015 antworten, denn das ist, was ich praktisch habe.

Eine Möglichkeit zum Ermitteln von Makrowerten, die für alle Visual Studio-Versionen funktionieren sollten, ist die Verwendung des Befehls . Ändern Sie Ihre Post-Build-Skript

echo TargetPath: "$(TargetPath)" 

zu sein, und Sie sollten in der Lage, den Wert des Makros im Ausgabefenster zu lesen, wenn Sie das Projekt erstellen. In den meisten modernen Versionen von Visual Studio sollte der Echo Trick jedoch nicht notwendig sein.

Im Post-Build-Ereignisse Immobilienseite klicken Sie auf der Dropdown-am Ende der Command Line Feld und klicken Sie dann auf < Bearbeiten ...>. In Visual Studio 2015 zeigt der folgende Dialog die Befehlszeile (n) und den ausgewerteten Wert, so dass Sie die Befehlszeile (n) mit den erweiterten Makros sehen können.

Es gibt auch die Macros >> Schaltfläche. Klicken Sie auf diese Schaltfläche und Sie erhalten einen Dialog, der jeden Makronamen und seinen Wert anzeigt. Über das Textfeld am oberen Rand der Liste können Sie die Ergebnisse nach denen filtern, die eine Zeichenfolge enthalten.

$(TargetPath)here als „die absoluten Pfadnamen der primären Ausgabedatei für den Build (definiert als Antrieb + Pfad + Basisnamen + Dateierweiterung)“ beschrieben. Was das wirklich bedeutet, ist der Wert des Ausgabeverzeichnis, Zielname und Ziel Erweiterung Eigenschaften auf der Allgemeine Immobilienseite.

Das LIB-Tool wird beschrieben here. Um weitere Informationen zum LIB-Lauf zu erhalten, können Sie die Option/VERBOSE hinzufügen. Sie können auch die Option/NOLOGO entfernen, damit Sie zumindest bestätigen, dass Sie LIB ausführen (und die richtige Version von LIB ausführen).

Es ist schwierig zu sagen, was "nichts wirklich" bedeutet. Ich vermute, die wahrscheinlichsten Fehler sind entweder die lib-Datei wird erstellt - aber nicht wo Sie erwarten; oder es gibt keine obj-Dateien in $ (ProjectDir) \ Source.

Eine Möglichkeit zu erkunden, dass letztere Fall in Ihrem Post-Build-Ereignis zu ändern wäre aufgeführt

dir "$(ProjectDir)\Source\*.obj" 

und dann untersuchen Sie die Build-Ausgabe zu sehen, ob es OBJ-Dateien. Wenn es keine OBJ-Dateien in dem Verzeichnis befinden, wird das Ausgabefenster etwas zeigen, ähnlich wie

1> Directory of C:\TestPrograms\vc.net.2015\VCConsole 
1> 
1> File Not Found 

und das Fenster Fehlerliste wird zeigen, dass der Befehl dir mit Code verlassen 1.

+0

Du hast es Sir. Dies ist, was ich für geblendet nach eingefügtem Code bekomme (Schande über mich). Meine .obj-Dateien wurden offensichtlich in mein eigenes Intermediate-Verzeichnis und nicht in mein Source-Verzeichnis ausgegeben. Sobald dies angesprochen wurde, hat alles funktioniert. Vielen Dank. – Jason

+0

P.S. Es war VS 2015 – Jason

Verwandte Themen