Benutzer mit den meisten Antworten
gemeinsamer pdb-ordner

Frage
-
folgendes szenario:
benutzte umgebung: vs2010 sp1, win vista ultimate 32 bit
wir haben vor, die pdb-dateien sämtlicher projekte in einem gemeinsamen ordner generieren zu lassen.
es gibt hier ca. 40 projekte und noch mehr solutions (1x solution pro projekt und weitere "sammelsolutions", die mehrere projekte beinhalten). jedes projekt befindet sich also in verschiedenen solutions. beispiel:
das projekt "MyButtonControl" befindet sich in den Solutions "MyButtonControl", "AllControls", "AllGui" und "All"
in den projekteinstellungen steht nun bei "c/c++ -> OutputFiles -> Program Database File Name" folgendes: "$(OutDir)_pdb's\"
das scheint ziemlich genau das zu ergeben, was wir wollen: alle pdbs der solution landen im gleiche ordner.
ABER:
neben meinen gewünschten pdbs wird noch für jedes projekt eine vc100.pdb generiert. das bedeutet leider:
1. parallele builds (auf einem 4-kern-system meint vs, daß es 4x parallel builden kann) funktionieren nicht mehr, weil ständig irgendein buildprozeß jammert, nicht auf die vc100.pdb zugreifen zu können, sie wäre von einem anderen prozeß gesperrt. das kann man natürlich umgehen, indem man parallele builds verbietet - nicht fein, geht aber.
2. jedesmal, wenn eine solution geladen wird, die ein projekt beinhaltet, das bereits aus einer anderen solution heraus gebaut wurde, funktioniert ein einfaches "build" nicht mehr. hier gibts dann die fehlermeldung:
"vc100.pdb is not the pdb file that was used when this precompiled header was created, recreate the precompiled header"
abhilfe schafft hier nur ein komplette rebuild der solution, was bei größeren projekten mindestens nervend ist.
wie kann man die probleme hier umgehen? oder ist die idee, die pdbs so zu sammeln, generell keine gute?
micha
Antworten
-
Wenn Du schon ein Verzeichnis benutzt, dann musst Du auch die Compiler-Generated-PDB Datei einen entsprechenden eindeutigen Namen geben.
- Öffne die Projekteinstellungen.
- Wähle C/C++
- Output FilesIn Program Database File Name steht normalerweise:
$(IntDir)vc$(PlatformToolsetVersion).pdbDu solltest diese Datei IMHO einfach im IntDir lassen, oder eben evtl. den Namen abwandeln, dass er eindeutig ist.
IMHO Ist diese Datei aber für das Debuggen unnötig, kann also im IntDir bleiben.
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de- Als Antwort markiert suriel6666 Mittwoch, 30. März 2011 12:18
-
du meinst, WENN ich schon die pdbs aller projekte gemeinsam in einem verzeichnis haben will, muß ich bspw. sowas in program database filename schreiben;
$(OutDir)_pdb's\$(ProjectName)_vc$(PlatformToolsetVersion).pdb
also etwas, das auch den projektnamen enthält? oder hab ich dich da falsch verstanden?So meinte ich es.
Aber IMHO kanst Du die Datei auch im IntDir belassen und vergessen.wenn ich das tue, wird im "pdb's" ordner eine pdb erzeugt (projektname_vc100.pdb), im $(IntDir) wird aber außerdem eine projektname.pdb datei, mit anderer größe/inhalt erzeugt. hat das etwas zu bedeuten? (nicht, daß es mich stören würde, was im IntDir landet. ist nur aus interesse)
Soweit ich weiß ist diese VC2000 pdb überhaupt nur bis zum Compile und Link Vorgang wichtig. Die finale PDB steht im OUTDIR. Dein Fehler war es vermutlich, auch diese Datei für "wertvoll" zu erachten.
Und das ist auch ziemlich genau so dokumentiert
http://msdn.microsoft.com/de-de/library/yd4f8bd1(VS.80).aspx
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.- Als Antwort markiert Martin RichterModerator Mittwoch, 30. März 2011 19:51
Alle Antworten
-
Wenn Du schon ein Verzeichnis benutzt, dann musst Du auch die Compiler-Generated-PDB Datei einen entsprechenden eindeutigen Namen geben.
- Öffne die Projekteinstellungen.
- Wähle C/C++
- Output FilesIn Program Database File Name steht normalerweise:
$(IntDir)vc$(PlatformToolsetVersion).pdbDu solltest diese Datei IMHO einfach im IntDir lassen, oder eben evtl. den Namen abwandeln, dass er eindeutig ist.
IMHO Ist diese Datei aber für das Debuggen unnötig, kann also im IntDir bleiben.
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de- Als Antwort markiert suriel6666 Mittwoch, 30. März 2011 12:18
-
> Wenn Du schon ein Verzeichnis benutzt, dann musst Du auch die Compiler-Generated-PDB Datei
> einen entsprechenden eindeutigen Namen geben.
du meinst, WENN ich schon die pdbs aller projekte gemeinsam in einem verzeichnis haben will, muß ich bspw. sowas in program database filename schreiben;
$(OutDir)_pdb's\$(ProjectName)_vc$(PlatformToolsetVersion).pdb
also etwas, das auch den projektnamen enthält? oder hab ich dich da falsch verstanden?
wenn ich das tue, wird im "pdb's" ordner eine pdb erzeugt (projektname_vc100.pdb), im $(IntDir) wird aber außerdem eine projektname.pdb datei, mit anderer größe/inhalt erzeugt. hat das etwas zu bedeuten? (nicht, daß es mich stören würde, was im IntDir landet. ist nur aus interesse)
-
du meinst, WENN ich schon die pdbs aller projekte gemeinsam in einem verzeichnis haben will, muß ich bspw. sowas in program database filename schreiben;
$(OutDir)_pdb's\$(ProjectName)_vc$(PlatformToolsetVersion).pdb
also etwas, das auch den projektnamen enthält? oder hab ich dich da falsch verstanden?So meinte ich es.
Aber IMHO kanst Du die Datei auch im IntDir belassen und vergessen.wenn ich das tue, wird im "pdb's" ordner eine pdb erzeugt (projektname_vc100.pdb), im $(IntDir) wird aber außerdem eine projektname.pdb datei, mit anderer größe/inhalt erzeugt. hat das etwas zu bedeuten? (nicht, daß es mich stören würde, was im IntDir landet. ist nur aus interesse)
Soweit ich weiß ist diese VC2000 pdb überhaupt nur bis zum Compile und Link Vorgang wichtig. Die finale PDB steht im OUTDIR. Dein Fehler war es vermutlich, auch diese Datei für "wertvoll" zu erachten.
Und das ist auch ziemlich genau so dokumentiert
http://msdn.microsoft.com/de-de/library/yd4f8bd1(VS.80).aspx
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.- Als Antwort markiert Martin RichterModerator Mittwoch, 30. März 2011 19:51
-
mein fehler war wohl, daß ich übersehen habe, daß es tatsächlich 2x was mit pdbs einzustellen gibt:
1. das oben erwähnte c/c++ -> output files -> Program database file name
2. linker -> debugging -> generate program database file
für alle projekte habe ich jetzt
1. wieder zurückgesetzt auf den von dir erwähnten default
2. auf "$(IntDir)..\_PDB\$(TargetName)_vc$(PlatformToolsetVersion).pdb"
gesetzt, wodurch wohl das erreicht wird, was ich wollte: die pdbs aller projekte landen in einem gemeinsamen verzeichnis, die vc100.pdb bleibt im obj-verzeichnis der jeweiligen projekte
danke für die hilfe