Seite 1 von 1

Qt und Windows

Verfasst: 27. September 2010 20:49
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

Verfasst: 27. September 2010 21:43
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.

number one

Verfasst: 27. September 2010 21:47
von softwaremaker
Lösung für 1)
in die .pro einfach hinzufügen
DESTDIR = ../meineBin/

Verfasst: 27. September 2010 21:59
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.

Verfasst: 28. September 2010 06:31
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.

Verfasst: 28. September 2010 09:58
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).

Verfasst: 28. September 2010 11:27
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.