Ich habe ein größeres C++ - Projekt mit Source-Dateien in mehreren Ordnern organisiert (auf dem Dateisystem).VisualStudio-Projekt mit mehreren Quelldateien mit demselben Namen?
In zwei dieser Ordner habe ich Dateien mit dem gleichen Namen. z.B.
\MyProject\foo\Blurp.cpp
\MyProject\foo\File.cpp
\MyProject\bar\File.cpp
\MyProject\bar\Knoll.cpp
das Projekt ist Cross-Plattform, und ich verwende autoconf auf Linux und OSX, haben aber MSVC auf W32 (aufgrund einiger 3rd-Party-C++ Bibliotheken i auf W32 verwenden und die C++ Binärschnittstelle Inkompatibilitäten über Compiler) zu verwenden, Auf der MSVC-Seite ist das Projekt in mehrere "Filter" (diese virtuellen Ordner) organisiert (mit Namen, die ungefähr den Verzeichnissen entsprechen, in denen die Dateien gespeichert sind), so dass ich sie unterscheiden kann.
jetzt das Problem ist, wenn ich das Projekt erstellen, MSVC setzt die Objektdateien in einem einzelnen flachen Diretory, und ich am Ende mit:
\MyProject\Release\Blurp.obj
\MyProject\Release\File.obj
\MyProject\Release\Knoll.obj
wie man sehen kann, gibt es nur eine File.obj
, so ein binäres Objekt fehlt. Offensichtlich beschwert sich der Linker, da er Klassen/Funktionen/... nicht finden kann, die in dieser fehlenden Objektdatei definiert sind.
Gibt es eine Möglichkeit, MSVC anzuweisen, Objektdateien mit einem eindeutigen Namen zu erstellen, abhängig von den Verzeichnissen (oder Filtern), in denen diese Dateien gespeichert sind?
i vorstellen, so etwas wie:
\MyProject\Release\foo\Blurp.obj
\MyProject\Release\foo\File.obj
\MyProject\Release\bar\File.obj
\MyProject\Release\bar\Knoll.obj
oder
\MyProject\Release\foo-Blurp.obj
...
oder was auch immer. alle anderen Build-Systeme, die ich kenne (CMake, Autotools), können mit mehreren Dateien gleichen Namens umgehen.
Diese Frage ist ähnlich wie 3729515, aber ich bin derzeit auf VS2008 stecken. (die vorgeschlagene Lösung für VS2008 - das Objektverzeichnis für jede fragliche Datei zu setzen - ist etwas, das theoretisch funktioniert, aber das ich aus praktischen Gründen vermeiden möchte)
Dank für die Eingabe enthält; $ (InputDir) \ $ (IntDir) \ sieht vielversprechend aus, und/aber ich hätte wirklich gerne eine Projekteinstellung (aus den angegebenen Gründen), vorzugsweise sogar in einem propertysheet, so dass die Änderung offensichtlich wird. Ich bin nicht sehr besorgt über obj-Dateien, die meinen Source-Tree überfluten (auch wenn insgesamt einige hundert obj-Dateien generiert werden) –
Nun, diese Lösung hat bei mir nicht funktioniert. Ich habe Fehler etwas über "kann Weg bla bla bla nicht finden". Also habe ich eine andere Lösung gefunden: Ich habe "fileWithSameName.cpp" aus meiner Lösung ausgeschlossen und eine weitere hinzugefügt, "AnotherFile.cpp", die darin enthalten ist, hat die einzige Zeile: [include "fileWithSameName.cpp"]. Es funktionierte für mich – Illidan
Dies funktioniert nicht für mich in VS 2015. Aber der etwas andere Eigenschaftswert vorgeschlagen unter https://stackoverflow.com/questions/3695174/visual-studio-2010s-strange-warning-lnk4042/3731643# 3731643 funktioniert: $ (IntDir) /% (RelativeDir)/ – peastman