Include Anweisungen


CopWorker

Mitglied
Hallo,

Ich habe seit kurzem ein Problem.
In meinem C++ - Projekt gibt es viele include-Anweisungen, die auf eine Header-Datei außerhalb des Projektverzeichnisses verweisen.
Das Projekt wurde in Visual Studio 2013 erstellt.

Jetzt habe ich das Projekt in Visual Studio 2017 konvertiert. Und diese Referenzen sind nicht mehr zulässig.
Kann mir jemand erklären, wie das jetzt in Visual Studio 2017 funktioniert?

Hier die Syntax:
C++:
#include "\abc2000_VST2013\Source\KomUC\Global.h"
Compilerfehler: Cannot find directory "abc2000_VST2013" in search paths:

Danke für die Hilfe
Fujitsufan
 

ComFreek

Mod | @comfreek
Moderator
Das ist aber ein komischer Pfad unter Windows. Soll das ein absoluter Pfad sein? Wenn ja, fangen die auf Windows normalerweise mit einem Drive-Buchstaben an (C:\...\, außer Netzwerkpfade).
 

CopWorker

Mitglied
Hallo ComFreek,

da hast du recht mit dem absoluten Pfad.
Hierbei handelt es sich aber um einen relativen Pfad,
bezogen auf die Visual Studio Projektdatei.

Das Projekt habe ich vor kurzem übernommen.
Es wurde schon unter Visual Studio 2005 bearbeitet
und zuletzt unter Visual Studio 2013, und läuft bestens.

Frage: Akzeptiert Visual Studio 2017 die relativen Pfade überhaupt noch?


Vielen Dank für die Hilfe
CopWorker
 

ComFreek

Mod | @comfreek
Moderator
Warum übernimmst du das Projektverzeichnis nicht einfach in die Includepfade in den Projekteinstellungen?

Dann würde ich beim Pfad aber auch den führenden Backslash \ entfernen - auch wenn es mit \ funktioniert.
 

CopWorker

Mitglied
Hallo ComFreek,

gerade das ist der Punkt an dem ich vom Glauben abfalle.
Das habe ich als erstes versucht.
Den Verzeichnispfad in den Projekteinstellung als "%(AdditionalUsingDirectories)" deklarieren.
G e h t n i c h t !!! Siehe "VS2017_Project_Include-Paths2.PNG"VS2017_Project_Include-Paths2.PNG

Vielen Dank
CopWorker
 

ComFreek

Mod | @comfreek
Moderator
Wieso trägst du das unter #using ein? Trag das unter "Additional Include Directories" ein mittels Variablen. Der Dialog sollte dir helfen die richtige zu wählen, etwa $(ProjectDirectory) oder so. Außerdem tätige die Einstlelung für alle Configurations und alle Plattformen, d.h. wähle zuerst unter Configurations und unter Platform "all" aus und ändere erst dann die Include Directories.
 

CopWorker

Mitglied
Hallo ComFreek,

ganz einfach. Weil das in ähnlichen Projekten, die ich übernommen habe, auch so drin ist.
Zumindest in Projekt bis VS2013.
Und zudem wird im Dialog mit den Verzeichnis-Browser immer ein absoluter Pfad erstellt.
Das wollte ich eigentlich vermeiden.
Die Projekte sollen von mehreren Arbeitsstationen aus bearbeitet werden.
Nicht an jeder Arbeitsstation gelten die gleichen Pfadeinstellung an denen
die Projekte verwaltet werden.

Die große Preisfrage ist jetzt: Was hat sich in Hinsicht von VS2013 zu VS2017 geändert,
dass dies nicht mehr so funktioniert mit den relativen Pfaden?

Muss ich weiter regergieren.
Aber trotzdem vielen Dank.

Wann du was in Erfahrung bringst, kannst du dich gerne bei mir melden.

CopWorker
 

ComFreek

Mod | @comfreek
Moderator
Die Projekte sollen von mehreren Arbeitsstationen aus bearbeitet werden.
Nicht an jeder Arbeitsstation gelten die gleichen Pfadeinstellung an denen
die Projekte verwaltet werden.
Genau für solche Anwendungsfälle sind ja Variablen auch gedacht.

Und zudem wird im Dialog mit den Verzeichnis-Browser immer ein absoluter Pfad erstellt.
Deswegen nutze Variablen, ggf. musst du die manuell eingeben.

Klappt es nun mit dem, was ich im vorherigen Beitrag beschrieben habe?
 

CopWorker

Mitglied
Die $(ProjectDir) habe ich, aber wie geht´s von da an weiter?
$(ProjectDir)\....\abc2000_VST2013\Source\KomUC;%(AdditionalIncludeDirectories)

Frage: Kann ich überhaupt vom Projektverzeichnis rückwärts rooten?
 

ComFreek

Mod | @comfreek
Moderator
Ich kenn dein Ordnerlayou ja nciht. Wieso enthält dein Pfad 4 Punkte nacheinander? Wie sieht die C++-Datei nun aus? Ja, du kannst rückwärts routen.
 

CopWorker

Mitglied
Hallo ComFreek,

die Variable bringt mir hier jetzt nicht sehr viel.
Den Pfad zu meinem Projekt schaffe ich grade noch.

Aber von da an rückwärts rooten.
Ich glaube das geht gar nicht.

Grüße CopWorker
 

Anhänge

CopWorker

Mitglied
Rückwärts ja, aber wie ich das feststelle, nicht weiter zurück als in das Verzeichnis in dem
meine Projektdatei steckt. Ich mach dir mal eine Verzeichnisstruktur als Ansicht.
Grüße CopWorker.
 

ComFreek

Mod | @comfreek
Moderator
na, 4 Verzeichnisebenen rückwärts eben.
Seit wann geht man n Verzeichnisse zurück, indem man n Punkte schreibt? Das wäre mir sehr neu. Ich kenn da nur die Syntax ../../../.. (wahlweise mit Backslashes).

Es gibt übrigens auch noch $(SolutionDir), wenn ich mich nicht irre. Das könntest du auch mal probieren. Idealerweise liegen deine Include-Dateien im oder unter dem SolutionDir.
 

CopWorker

Mitglied
Hallo ComFreek,

das mit den ../../../ von mir aus auch ..\..\..\ versuche ich gleich mal.

$(SolutionDir) liegt parallel zu $(ProjectDir).

Zitat""""Idealerweise liegen deine Include-Dateien im oder unter dem SolutionDir.""""
Das wäre mir auch am liebsten. Das ist hier mal so gewachsen die letzten 25 Jahre.
Jetzt bin ich seit letztem Jahr zu dem Team dazugestoßen, was soll ich machen???

Und hier der Verzeichnisbaum nachgestellt. Siehe Anhang.

Vielen Dank für deine Geduld
Grüße CopWorker
 

Anhänge

CopWorker

Mitglied
Hallo ComFreek,

mit ../../../ geht´s auch nicht. Nicht mal ein Vorschlag von System.
Mit .\..\ bekomme ich wenigstens einen Hinweis vom System.
Allerdings wieder ohne Bezug auf das Projektverzeichnis.

RelativePath.png

Fazit: Geht nicht, fertig!!!!

Manchmal muss man sich geschlagen geben.
Oder, manchmal verliert man und manchmal gewinnen die anderen.

Trotzdem vielen Dank.
Grüße CopWorker
 

ComFreek

Mod | @comfreek
Moderator
Nichts für ungut, aber es scheint mir, dass du ein bisschen nach Trial & Error probierst :) Der Dialog im Screenshot von deinem Post #11 zeigt ja den ausgewerteten Wert.
Wie sieht die C++-Datei nun aus?
Außerdem weiß ich immer noch nicht, wie die nun aussieht.

Ich weiß aus eigener Erfahrung, dass das Fixen von Suchpfaden ganz schön tricky sein kann. Wichtig ist systematisch vorzugehen! Sonst verliert man den Überblick, was nicht funktioniert oder funktionieren könnte.
 

Endurion

Erfahrenes Mitglied
Natürlich geht auch rückwärts raus. Warum machst du einen Punkt nach $(ProjectPath) und vor dem Slash?

Wenn du unsicher bist, setz den Wert der Variablen in deinen Pfad ein.

Grade eben ausprobiert, das klappt so. Beide Verzeichnisse werden bei #Include angezogen:

p:\common;$(ProjectDir)/../DebugHost2
 

CopWorker

Mitglied
Hallo ComFreek,

Außerdem weiß ich immer noch nicht, wie die nun aussieht.
im Post #15 habe ich die Verzeichnisstruktur von meinem Projekt incl. *.cpp Dateien in denen die #include Anweisungen enthalten sind (linke Bildhälfte) und eine Verzeichnisstruktur von meinen Headers (rechte Bildhälfte) dargestellt.
Oder willst du die Inhalte der Dateien sehen, das geht leider nicht. Da bekomme ich Probleme mit meinem Chef.

Aber ich bin dem Fehler auf der Spur. Ich mache noch ein paar Tests und werde es berichten.

Vielen Dank
Grüße CopWorker
 

CopWorker

Mitglied
Hallo Endurion,
Natürlich geht auch rückwärts raus. Warum machst du einen Punkt nach $(ProjectPath) und vor dem Slash?
weil ich das in der Form von dem Projekt (VS2013) so übernommen habe.
Das steht das so drin.
Hab´s grade nochmals geändert. Ob mit oder ohne Punkt vor dem Backslash, funktioniert beide male.

Grüße CopWorker