Seite 1 von 1

qmake und dynamisch erzeugt Files

Verfasst: 19. Juni 2008 13:39
von shaka
Hallo

Ich habe folgendes Problem: Ich schreibe an einem Projekt, das gsoap verwendet. Dabei wird als erster Build-Schritt vom gsoap-Preprocessor eine Reihe von .h und .cpp Files erzeugt, die ich dann anschließend ganz normal kompiliere und linke. Ich habe mir den Preprocessorschritt über QMAKE_EXTRA_COMPILERS in mein pro-File eingebunden und die erzeugten Files zu HEADERS bzw. SOURCES hinzugefügt.

Das funktoniert alles problemlos und baut auch wunderbar, außer daß der Aufruf von qmake zu einer Reihe von "File not found"-Warnungen führt, da es die Files, die später der Präprozessor erzeugt, zum Zeitpunkt des qmake-Aufrufs natürlich noch nicht gibt.

Meine Frage: Kann ich diese Warnungen irgendwie unterbinden? Wir haben hier eigentlich die Firmenphilosophie des Warnungs-freien Kompilierens...

Danke
Shaka :?:

Verfasst: 20. Juni 2008 17:40
von Christian81
Mit qmake ist mir sowas nicht wirklich bekannt. Und wenn es was größeres wird würde ich eh nicht qmake benutzen sondern evtl. cmake.

Verfasst: 18. Juli 2008 11:55
von catani
Wenn Du beispielsweise mit

Code: Alles auswählen

QMAKE_EXTRA_COMPILERS += MyTargetCPP
ein eigenes Target definierst. Kannst Du mit

Code: Alles auswählen

MyTargetCPP.output = $$GeneratedCPPFiles
MyTargetCPP.input = InputFile
MyTargetCPP.commands = $$CPPGENERATOR -iBlaBal -o$$GeneratedCPPFiles
MyTargetCPP.depends = $$WeiteresTarget
MyTargetCPP.CONFIG = target_predeps no_link
MyTargetCPP.variable_out = SOURCES
ein Target definieren bei dem die dynamisch generierte CPP Dateien den Sourcen des "Haupttargets" hinzugefügt werden. Die Benutzer Variable GeneratedCPPFiles muß die Liste der erzeugten CPP Namen enthalten. Die Variable CPPGENERATOR enthält denn Filenamen des CPP Generators
target_predeps sorgt dafür, dass die CPP Dateien erzeugt werden bevor das Haupttarget bearbeitet wird.

Der Trick liegt in der letzen Zeile, die dafür sorgt, dass die erzeugten Outputdateien den SOURCES hinzugefügt wird. Die Warning wird auf diese Weise ausbleiben :)

Grüsse aus Norddeuschtland
catani