Seite 1 von 1

[Bug] qmake über mehrere Teilprojekte

Verfasst: 18. Dezember 2005 12:54
von BartSimpson
Hallo ich habe folgendes Problem. Ich habe eine Projekt bestehend aus dem Hauptprogramm und ein paar Plug-ins. Das ganze soll zusammen übersetzte werden und das Ergebnis in einem gemeinsamen Verzeichnis landen. Doch irgenwie klappt das nicht mit der globalen Variabel für den Pfad. Hier die Struktur des Ganzen:

│ Makefile
│ alles.pro
│ Vorgaben.pri

└───Bestandteile
├───Plugin1
│ Plugin1.pro
└Quellen
xx.cpp
.
.
.
└───Hauptprogramm
│ Makefile
│ Makefile.Debug
│ Makefile.Release
│ Hauprprogramm.pro

└───Quellen
haupt.cpp
Das stehen in den Dateien:
alles.pro

Code: Alles auswählen

TEMPLATE       =subdirs
PFAD   	        =C:/c++/Projekte/SmartCard/Entwicklung
SUBDIRS	       += Bestandteile/Hauptprogramm\
		  Bestandteile/Plugin1\
		  Bestandteile/PluginX

Vorgabe.pri

Code: Alles auswählen

CONFIG 	      += qt release
#Mit Debug Infos??
CONFIG		+= MEINDEBUG
#Müll entfernen
#QMAKE_POST_LINK =strip -s $(TARGET)
message(Pfad ist $$PFAD)
DESTDIR	       = $$PFAD/bin
MOC_DIR	       = $$PFAD/tmp/moc
OBJECTS_DIR    	 = $$PFAD/tmp/obj
UI_HEADERS_DIR 	 = $$PFAD/tmp/ui_headers
Hauptprogramm.pro:

Code: Alles auswählen

include (../../Vorgaben.pri)
CONFIG(MEINDEBUG)
{
	message("Erstelle Version mit Hilfsmeldungen")
	DEFINES +=MEINDEBUG
	win32:config+=console
}
TEMPLATE      = app
TARGET	      = tests
SOURCES      += Quellen/haupt.cpp
nur leider klappt das mit der Variable Pfad nicht:(
nach dem aufruf von qmake und make passiert nix
keine Fehlermeldung und auch der Compiler wird nicht ageworfen.
Das einzige, was man erhält ist:
cd Bestandteile\Hauptprogramm && mingw32-make
mingw32-make[1]: Entering directory `C:/c++/Projekte/SmartCard/Entwicklung/Bestandteile/Hauptprogramm'
mingw32-make -f Makefile.Release
mingw32-make[2]: Entering directory `C:/c++/Projekte/SmartCard/Entwicklung/Bestandteile/Hauptprogramm'
mingw32-make[2]: Nothing to be done for `first'.
mingw32-make[2]: Leaving directory `C:/c++/Projekte/SmartCard/Entwicklung/Bestandteile/Hauptprogramm'
mingw32-make[1]: Leaving directory `C:/c++/Projekte/SmartCard/Entwicklung/Bestandteile/Hauptprogramm'

Verfasst: 19. Dezember 2005 07:30
von Christian81
Eventuell kannst Du es mal mit 'qmake -d foo.pro > temp.txt 2>&1' probieren und Dir dann den Debug-Output mal anschauen.

Verfasst: 19. Dezember 2005 10:21
von BartSimpson
Ich habe mir mal den lauf von Make angeschaut. qmake erstellt zu erste nur das 1. Makefile. Wenn dieses aufgerufen wird, werden anscheinet erst die anderen generiert. Also kann die Variable nicht weitergebeben werden. Deshalb habe ich mit eine Krücke gebaut. nicht schön, aber es geht:
Das habe ich in die .Pro Datei eingefügt, die die sub's erstellt:

Code: Alles auswählen

win32 {
        PFAD = $$system(echo %CD%)
	system(echo $$PFAD >$$(TMP)/x.x)
}
else {
        PFAD = $$system(pwd)
	system(echo $$PFAD >/tmp/x.x)
}
Und as hier in meine Vorgaben.pri

Code: Alles auswählen

isEmpty(PFAD) {
	win32 {
			PFAD=$$system(type $$(TMP)"\x.x")
} else {
		PFAD=$$system(cat /tmp/x.x)
}
}


Verfasst: 19. Dezember 2005 13:26
von BartSimpson
Aber jetzte kommt das nächste Problem.
Das 1. Plugin soll übersetzt werden. Doch leider wird kein gültiges Makefile erzeugt. Denn Make endet mit dem Fehler:
mingw32-make[2]: *** No rule to make target `C:\c++\Projekte\SmartCard\Entwicklung\tmp\moc\moc_Terminal.cpp', nee
ded by `..\..\tmp\obj\moc_Terminal.o'. Stop.
in der .pro Datei steht eigenlich alles richtig:)

Code: Alles auswählen


PROJEKTTEIL   = Terminal
TEMPLATE      = lib
include (../../Vorgaben.pri)
VERSION       = 0.0.1
TARGET	      = terminal
HEADERS	      = Quellen/Terminal.h
SOURCES	      = Quellen/Terminal.cpp

Verfasst: 19. Dezember 2005 13:47
von Christian81
Wie hat das Trolltech denn mit ihrem Source gemacht? Von dort müsste man das doch leicht abschreiben können...

Verfasst: 19. Dezember 2005 13:51
von BartSimpson
Da habe ich auch schon geschaut. Und so habe ich es eigenlich gamcht. Aber ich habe rausgefunden, das es anscheinet ein Bug ist. Denn wenn ich nicht die Varaiable MOC_DIR verbiege, dann geht es. Alle anderen Pfadvariablen kann ich verbieben wie ich will. Nur bei MOC_DIR gibt es Ärger.

Verfasst: 19. Dezember 2005 22:12
von BartSimpson
Nach Rücksprache mit Trolltech ist es ein Bug.