Qt und Windows

Verschiedenes zu Qt
Antworten
progger1986
Beiträge: 8
Registriert: 13. März 2009 21:14

Qt und Windows

Beitrag von progger1986 »

Manchmal ist Qt und Windows eine echte qual. Was unter Linux ein kinderspiel ist kann unter Windows zu echten Frustration werden:

1. Warum wird unter Windows die Executable in ein extra unterverzeichnis gebaut? Da kann problematisch werden, wenn man auf projekteigen ressourcen zugreifen will, die nicht in einer Ressource-File eingegragen sind.
2. Was sollen diese Shadow builds?
3. Das SDK: Warum trägt es bei der installation nicht eine Pfade in die PATH Variable mit ein?

4. Ein aktuelles Problem: Zwei ähnliche Projekte: Das eine Kompiliert ohne Shadowbuild, das andere nicht. Der Fehler ist, dass Header files nicht gefunden werden.
BSP: PROJEKT/src/main.cpp hat die Zeile

Code: Alles auswählen

#include "src/abc.h"
Die PROJEKT/src/abc.h existiert auch.
In dem einem Projekt kein Problem aber in dem anderen hingegen schon :roll:

Edit:
Die beiden betreffenden Projekte sind:
Funktioniert ohne Shadowbuild: http://linux-ecke.de/Capitalism/package ... _0.5.1.tbz
Funkioniert nicht ohne: http://linux-ecke.de/Ballway/Ballway_0.1.tar.gz
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

1. was ist daran so schlimm?
2. was ist ein Shadow-Build?
3. Warum sollte es - wenn jede Installation das machen würde... naja. Nichtmal MSVC macht das.
4. C++ Grundlagen würde ich sagen - aber zu wenig infos.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
softwaremaker
Beiträge: 149
Registriert: 1. April 2009 19:25

number one

Beitrag von softwaremaker »

Lösung für 1)
in die .pro einfach hinzufügen
DESTDIR = ../meineBin/
progger1986
Beiträge: 8
Registriert: 13. März 2009 21:14

Beitrag von progger1986 »

@Christian81:
Zu 1: Wenn man Ressourcen hat auf die zur Laufzeit zugegriffen wird können diese nicht gefunden werden, wenn sie nicht im Qt Ressourcen System sind. In einigen fällen macht es sogar sinn, diese nicht im Ressourcen-system zu haben.

Zu 2: Bei einem Sahdow build wird das projekt komplett auserhalb des Projektverzeichnissen kompiliert. Vermutlich will man erreichen, dass sich Sourcen nicht mit den build vermischen. Der Sinn dahinter entzieht sich mir wegen den Nachteilen (Siehe 1) und der einfachen Möglichkeit das Projekt zu bereinigen.

Zu 3: Nicht weiter kritisch, da schnell selbst erledigt, aber wenn man selbst per Shell kompilieren will muss man es machen.

Zu 4: Das Betreffende Projekt kompiliert unter Linux ohne murren. Der compiler ist in beiden fallen gcc.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

1. QCoreApplication::applicationDirPath () unter Berücksichtigung der zusätzlichen Pfade geht auch, Aber auch das leigt weniger an Windows und Qt als an der verwendeten IDE (in de Falle wohl MSVC). Außedem interessiert dies ja nur beim Debuggen.
2. Ah, du meinst Out-of-Source builds ... den Begriff Shadow-Build habe ich noch nie gehört.
4. Ohne Code bzw. kleinen Beispiel... es liegt definitiv nicht an Windows. Ich weiss nichtmal welches Buildsystem Du verwendest

/edit: 1. korrigiert
/edit2: Das ganze mit debug und release kommt ggf. auch zustande weil unter Windows qt per default debug_and_release (falls Du qmake benutzt) an ist. Wenn man das hart auf debug oder release stellt (so wie es unter Linux ist) ist da auch weg.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
progger1986
Beiträge: 8
Registriert: 13. März 2009 21:14

Beitrag von progger1986 »

Zu AW 1: Das mit dem appDirpath() (abgekürzt) ist eine guter Tipp. Dafür schon mal ein dankeschön.

Zu AW 4: Die beiden betreffenden Projekte habe ich in meinem Eröffnungsbeitrag angegeben.

Buildsystem ist mei mir mingw (Ich nutze das mingw SDK und qtcreator).
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Trotzdem wäre ein kleines Beispiel nicht schlecht. "foo.h" und <foo.h> sind zwei unterschiedliche Dinge. Ich schätze das ist auch dort das Problem dass es nicht korrekt eingehalten wurde. Der eine gcc ist da evtl. etwas strenger als der andere.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten