Seite 1 von 1

#include ohne Qt Modul mit cmake

Verfasst: 24. Januar 2011 13:45
von jerry42
Hallo zusammen,

im Moment arbeite ich an einem Projekt mit cmake.

Gerade inkludiere ich Qt-Klassen mit
#include <QtCore/QString>

Ich würde aber gerne auf das QtCore verzichten können.
also #include <QString>

Das funktioniert aber in meiner jetzigen Konfiguration leider nicht.

Vielleicht kann mir jemand sagen, was ich in CMakeLists.txt ändern muss um den gewünschten Effekt zu erzielen.

Danke
jerry42

Zur Zeit sieht der Abschnitt so aus:
# Qt
FIND_PACKAGE( Qt4 REQUIRED )
IF( QT4_FOUND )

SET( HAVE_Qt4 1 )
SET( QT_USE_QTOPENGL TRUE )
SET( QT_USE_QTTEST TRUE )
INCLUDE( ${QT_USE_FILE} )
INCLUDE_DIRECTORIES( ${QT_INCLUDE_DIR} )
LIST( APPEND requiredLibs ${QT_LIBRARIES} )
ENDIF( QT4_FOUND )

Verfasst: 24. Januar 2011 14:09
von Christian81
Die CMakeLists.txt sieht nicht gerade sauber aus... Siehe Doku in FindQt4.cmake:
# Typical usage could be something like:
# find_package(Qt4 4.4.3 COMPONENTS QtCore QtGui QtXml REQUIRED )
# include(${QT_USE_FILE})
# add_executable(myexe main.cpp)
# target_link_libraries(myexe ${QT_LIBRARIES})

Verfasst: 24. Januar 2011 14:43
von jerry42
danke für die antwort.
bin leider kein cmake experte.

#include <QtCore/QString>
funktioniert leider noch immer nicht.

Meine Version sieht nun wie folgt aus:

find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL REQUIRED )
INCLUDE( ${QT_USE_FILE} )
LIST( APPEND requiredLibs ${QT_LIBRARIES} )

Dieser Teil befindet sich in ./src/CMakeLists.txt

in ./CMakeLists.txt kommt dann folgendes:

ADD_DEFINITIONS(${QT_DEFINITIONS})

# Create build files.
ADD_EXECUTABLE(./bin/Program
${Program_SRCS_global}
${Program_MOC_SRCS}
${Program_UI_HDRS})

# Link against requiredLibs and optionalLibs.
TARGET_LINK_LIBRARIES( ./bin/Program ${requiredLibs} ${optionalLibs} )

Verfasst: 24. Januar 2011 15:40
von Christian81
Das Beispiel so wie es oben beschrieben ist funktioniert bei mir:

Code: Alles auswählen

find_package(Qt4 4.4.3 COMPONENTS QtCore QtGui QtXml REQUIRED )
include(${QT_USE_FILE})
add_executable(myexe main.cpp)
target_link_libraries(myexe ${QT_LIBRARIES})

--> Compiler-Ausgabe:
/usr/local/bin/c++   -DQT_GUI_LIB -DQT_XML_LIB -DQT_CORE_LIB -I/usr/include/QtGui -I/usr/include/QtXml -I/usr/include/QtCore   -o CMakeFiles/myexe.dir/main.o -c /home/ehrlicher_c/tmp/cmake/main.cpp

Verfasst: 24. Januar 2011 16:25
von jerry42
da könnte der Hund begraben liegen.
In meiner Ausgabe tauchen nur die Libraries auf, aber wohl nicht die includes.

Könnte die Ursache sein, dass ich Qt in ./src/CMakeLists.txt und nicht in ./CMakeLists.txt einbinde?

Wie kann ich ihm nochmal direkt sagen wo die includes von Qt zu finden sind?

Verfasst: 24. Januar 2011 16:29
von Christian81
Mal sollte Qt schon dort einbinden wo man es benutzt, ja...

Verfasst: 24. Januar 2011 16:37
von jerry42
aber ich benutze es ja letztlich in src, und selbst in src mag er es nicht wenn ich das Qt Modul weglasse im #include
im include Ordner findet er die Qt Sachen ebenso, nur eben nich ohne Qt-Modul.

Ich weiß nicht so recht was ich machen soll, um das zu fixen?!

Verfasst: 24. Januar 2011 16:46
von jerry42
also ich hab den Qt Teil nun auch in die ./CMakeLists.txt kopiert und nun werden beim Kompilieren auch die Includes angezeigt.
Und es scheint zu funktionieren.

Auch wenn ich den Qt Teil aus der ./src/CMakeLists.txt nehme funktioniert es weiterhin.

Danke für deine Hilfe!