2015-07-24 7 views
8

Ich versuche, ein SUBDIR qmake-Projekt mit relativ Verzeichnisse zu verwenden:Wie verwende ich Shadow Build mit relativen Unterverzeichnissen?

TEMPLATE = subdirs 
SUBDIRS = app ../lib1 

Wenn QT Schöpfer dieses Projekt bauen mit „Schatten build“, die in einem anderen Verzeichnis bedeutet, es die Ausgabe der Datei legt auf diese Weise:

Shadow-Build-Directory/ 
    app/ 
     main.obj 
     ... 

Das Problem ist, dass, weil mein subdir relativ ist, ist es den gleichen relativen Pfad für die Ausgabe verwendet, versuchte lib1 build in Shadow-Build-Directory/../lib1 zu setzen!

Wie kann ich dies vermeiden?

Vielen Dank.

EDIT: Ich verwende neueste Qt 5.5.

+0

Können Sie das Lib1-Projekt nicht auf die gleiche Ebene des App-Projekts setzen, also befindet es sich im Stammprojektbaum? – Tryum

+0

Ich werde mehrere Anwendungen (vielleicht 10 oder mehr) mit dieser Bibliothek haben. Ich hätte gerne ein sauberes Verzeichnis. Wie auch immer, wenn dies die einzige Lösung ist, werde ich nicht viele Möglichkeiten haben:/ –

+0

Du könntest 'Shadow-Build-Directory' in ein leeres Verzeichnis stellen, wo' lib1' Ordner kein Problem wäre. –

Antwort

0

Neue Antwort: Ich habe einige Tests gemacht und außerhalb des Root-Projekts zu sein scheint ein großes Problem für qmake zu sein: $$ shadowed() gibt nichts zurück (wie in der Dokumentation außerhalb des Quellbaums angegeben), Aus den gleichen Gründen wird .qmake.conf (undokumentiertes Feature) im Stammprojektverzeichnis nicht in lib1-Projekt geladen.

Ich denke, die Lösung für Sie Problem ist, lib1 als eigenständiges Projekt zu halten, bauen Sie die Bibliothek ein für allemal. Fügen Sie dann in jedem Ihrer Projekte den Verweis auf die Binärdateien und Header von lib1 hinzu.

Es sogar mit qmake Funktionen automatisiert werden könnte: In jedem Ihrer Projekte, geben Sie den Pfad Ihrer lib1 richtig Funktion geschrieben, dann Zugabe

CONFIG += lib1 

automatisch konfigurieren würde Pfad und Link-Richtlinie für Ihre Projekte.

Alte Antwort: kann jetzt nicht versuchen, aber ich denke, dass

DESTDIR = $$shadowed($$PWD)/lib1 

in lib.pro Datei sollten Sie Problem beheben.

+0

Es funktioniert nicht, ich habe es getestet :-( –

+0

Auch wenn es nicht die perfekte Antwort ist, gebe ich Ihnen das Kopfgeld, weil Sie geantwortet haben. Danke :-) –