Seite 1 von 2

qmake spinnt --> nimmt dateien doppelt

Verfasst: 15. August 2005 17:56
von MASTER-Tim
Hi,


ich habe ein Projekt erstellt (windows)
folgende Dateien gehören dazu:

/main.cpp
/abc/Mainwindow/mainwindow.cpp
/abc/Mainwindow/mainwindow.h

wenn ich jetzt qmake -project ausführ (und qmake mach, um die makedatei zu erstellen), so befindet sich die datei mainwindow.cpp doppelt in der makedatei:

SOURCES = \main.cpp \
\abc\Mainwindow\mainwindow.cpp \
\abc\Mainwindow\mainwindow.cpp
OBJECTS = debug\main.o \
debug\mainwindow.o \
debug\mainwindow.o
wenn ich das kompilier, kommen natürlich fehler :(

wie kann ich das problem umgehen...?


Danke,


Tim

Verfasst: 15. August 2005 18:25
von MASTER-Tim
Hi,


ich hab die datei mainwindow.cpp mal in Cmainwindow.cpp umbenannt und es geht jetzt... komisch


EDIT:

wenn ich in der datei Cmainwindow.h folgendes tuh:
#include "Cmainwindow.h"
dann ist es doppelt in der makedatei...



das heißt, ich kann die header datei nicht includen :((

Tim

Verfasst: 15. August 2005 19:49
von Christian81
woher kommen die backslashes? kann sein das qmake die falsch interpretiert?

Verfasst: 15. August 2005 20:03
von MASTER-Tim
Hi,

ka
jetzt sind in den pfaden nur backslashes:
SOURCES = Code\main.cpp \
Code\abc\mainwindow\Cmainwindow.cpp \
Code\abc\mainwindow\Cmainwindow.cpp
OBJECTS = debug\main.o \
debug\Cmainwindow.o \
debug\Cmainwindow.o

Tim

Verfasst: 15. August 2005 20:26
von Christian81
Ich würde mal versuchen die cpp - Datei zu entleeren - d.h. immer etwas daraus löschen und qmake -project aufrufen bis sie nur noch einmal in der pro-Datei erscheint. Hast du evtl. ein Q_OBJECT in der cpp definiert?

Verfasst: 15. August 2005 20:40
von MASTER-Tim
Hi,


also, ich glaube, ich bin hinter das schema gekommen


wenn ich eine cpp datei mit dem namen $name.cpp habe und diese die datei $name.h included, ist es doppelt in der makefile erhalten .oO

bei include $nameH.h gehts (oder etwas anderes)

Tim

Verfasst: 16. August 2005 11:50
von taki
Was Du brauchst ist so etwas in der Headerdatei:

Code: Alles auswählen

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
Das müsste helfen.

Verfasst: 16. August 2005 11:50
von taki
Was Du brauchst ist so etwas in der Headerdatei:

Code: Alles auswählen

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
Das müsste helfen.

Verfasst: 16. August 2005 11:56
von MASTER-Tim
Hi,


bringt nix :)


TIm

Verfasst: 16. August 2005 12:01
von Christian81
Kannst du mal deinen Code posten? Eventuell schon in einer abgespckten Version in der der Fehler immer noch auftritt.
Das mit den #ifndef usw. ist nicht nötig und wird schon gar nicht von qmake ausgewertet.

Verfasst: 16. August 2005 15:54
von MASTER-Tim
Hi,

es gibt 3 Dateien

main.cpp hat geschrieben: #include <stdio.h>

#include "QApplication.h"

#include "mainwindow.h"

int main(int argc, char *argv[])
{

return 0;

}
mainwindow.cpp hat geschrieben: #include "mainwindow.h"

Cmainwindow::Cmainwindow() : QWidget(0, 0)
{

}
mainwindow.h hat geschrieben: #ifndef _MAINWINDOW_H_
#define _MAINWINDOW_H_

#include <QMainWindow>
#include <QWidget>
#include <QPushButton>
#include <QMessageBox>

class Cmainwindow : public QWidget
{
Q_OBJECT
private:

public:
Cmainwindow();
};



#endif //_MAINWINDOW_H_

so, alle 3 dateien sind in einem Ordner sagen wir x:/Code/

die qmake führe ich immer unter x:/ aus, er durchsucht ja die unterordner... dann wird es doppelt eingetragen, aber wenn die dateien ALLE in dem ordner sind, wo qmake ausgeführt wird, ist es alles nur einmal eingetragen... total komisch
dies kann ich aber mit dem include und anderen HeaderFileNamen umgehen (wie oben beschrieben)


Tim

Verfasst: 16. August 2005 16:26
von Christian81
Ich werde es mir heute abend mal anschauen. Eventuell findest Du ja schon was raus wenn Du qmake mit der Option '-d' ausführst. Am besten mittels 'qmake -project -d > temp.txt 2>&1' die Ausgabe in eine Datei umleiten und dann mal schauen was qmake macht.

Verfasst: 16. August 2005 16:36
von MASTER-Tim
Hi,


DEBUG 1: SOURCES === Code/main.cpp :: Code/qt/mainwindow.cpp :: Code\qt\mainwindow.cpp

:\


Tim

Verfasst: 16. August 2005 17:48
von Christian81
Es passiert immer wenn du qmake einen PFad mit angibst. Ohne PFad funktioniert es:

Code: Alles auswählen

D:\qt-3.3\testcase\tmp>qmake -project -d d:\qt-3.3\testcase\tmp
DEBUG 1: DEPENDPATH === d:\qt-3.3\testcase\tmp :: Code :: d:\qt-3.3\testcase\tmp
\Code
DEBUG 1: HEADERS === Code\mainwindow.h :: d:\qt-3.3\testcase\tmp\Code\mainwindow
.h
DEBUG 1: INCLUDEPATH === . :: Code
DEBUG 1: QMAKE_MAKEFILE === D:/qt-3.3/testcase/tmp\tmp.pro
DEBUG 1: SOURCES === Code\main.cpp :: Code\mainwindow.cpp :: d:\qt-3.3\testcase\
tmp\Code\main.cpp :: d:\qt-3.3\testcase\tmp\Code\mainwindow.cpp
DEBUG 1: TEMPLATE_ASSIGN === app

D:\qt-3.3\testcase\tmp>qmake -project -d
DEBUG 1: DEPENDPATH === Code
DEBUG 1: HEADERS === Code\mainwindow.h
DEBUG 1: INCLUDEPATH === . :: Code
DEBUG 1: QMAKE_MAKEFILE === D:/qt-3.3/testcase/tmp\tmp.pro
DEBUG 1: SOURCES === Code\main.cpp :: Code\mainwindow.cpp
DEBUG 1: TEMPLATE_ASSIGN === app
Der Pfad ist ja eigentlich auch unnötig. Im Grunde ist es wohl ein Fehler beim Konvertieren der Pfadangaben. Mal schauen ob qmake/qt4 auch das Problem hat...

Verfasst: 16. August 2005 20:30
von MASTER-Tim
Hi,


eh ja, wir reden von qmake von QT4 :>, sry dass ich das noch nicht gesagt hab

2. gebe ich bei qmake -project keinen pfad an


Tim