[Bug] qmake über mehrere Teilprojekte

Verschiedenes zu Qt
Antworten
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

[Bug] qmake über mehrere Teilprojekte

Beitrag 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'
Zuletzt geändert von BartSimpson am 19. Dezember 2005 22:12, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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)
}
}

BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wie hat das Trolltech denn mit ihrem Source gemacht? Von dort müsste man das doch leicht abschreiben können...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Nach Rücksprache mit Trolltech ist es ein Bug.
Antworten