Ich habe ein Projekt mit einigen Ordnern, die Quelldateien mit den gleichen Namen enthalten passieren.Qmake: Dateinamen Konflikte in verschiedenen Ordnern vermeiden, ohne Bibliotheken Einführung
Mein Quellbaum sieht wie folgt aus:
project.pro
foo/
conflict.h
conflict.cpp
bar/
conflict.h
conflict.cpp
some.h
other.h
files.h
main.cpp
Per Voreinstellung qmake ein Makefile erzeugt, die einen Build Baum wie folgt produzieren:
conflict.o
main.o
target
Wo conflict.o
die Datei für resultierende Objekt ist beide foo/conflict.cpp
und foo/conflict.h
.
Ich kann nicht zu ändern ihre Namen, weil sie ein externes Tool und zwingt unterschiedliche Dateinamen erzeugt unter Verwendung würde bedeuten, deren Inhalt zu ändern, so ist dies keine Option.
ich nicht auch Qmake SUBDIRS
Vorlage verwenden mag, weil dies, dass (1) jeder subdir gebaut separat als Bibliothek und somit sehr erschwert den gesamten Build-Prozess (in meinen Augen zumindest) bedeuten würde, und (2) Im Verzeichnis der obersten Ebene kann ich keine Quelldateien haben. Oder liege ich falsch?
Kann ich qmake nicht einfach sagen, die Objektdateien in separate Verzeichnisse innerhalb des Buildverzeichnisses zu schreiben? So wird mein Build-Baum wie folgt aussehen:
foo/
conflict.o
bar/
conflict.o
main.o
target
Oder gibt es andere Lösungen weder fordern die Quelldateien zu benennen, noch so etwas wie statische Bibliotheken kompliziert einzuführen? Ich kann einfach nicht glauben, dass Qt dieses (in meinen Augen einfache) Problem jahrelang nicht gelöst hat. (I schon hat dieses Problem vor 4 Jahren, konnte aber die Dateien in diesem Projekt umbenennen, während hier kann ich nicht.)
Wenn es wichtig ist: Ich benutze Qt 4.8 sowohl auf Ubuntu mit G ++ und Windows mit mingw32.
Es ist nicht möglich. –
@NikosC. Kann ich eine Profildatei für die Top-Level-Dateien haben, die mit den anderen Bibliotheken verknüpft werden + eine Top-Level-SUBDIRS-Profildatei, die das Unterverzeichnis '.' Dies würde erfordern, dass ich auch die .pro-Datei für dieses subdir überschreibt, etwas anderes als der Top-Level-.proDatei für die gesamte App zu sein. Ich hoffe du verstehst was ich meine. Ich möchte nur vermeiden, dass ich alle Top-Level-Dateien in ein physisches Unterverzeichnis verschieben muss. – leemes
Sie sollten wahrscheinlich nur eine zusätzliche Projektdatei für 'foo' verwenden, und Sie behalten eine vorhandene für die oberste Ebene dir und' bar'. Eine weitere Möglichkeit besteht darin, den widersprüchlichen Dateinamen zu symbolisieren: "ln -s bar/conflict.cpp bar/conflict_bar.cpp" und dann den Symlink in der Projektdatei zu verwenden. –