Ubuntu 13.04 CMake and Qt4 and Qt5

qt4qt5Ubuntu

I'm using the new Ubuntu 13.04 and installed qt via apt-get install. It seems that qt5 is installed now. A CMake Project using qt5 workes well.

I had the same code running on a machine with qt4 installed on ubuntu 12.04 and it worked well. But now I get the following Error: (Do not worry about the boost stuff, it comes from a Parent CMakeLists.txt)

CMake Error at /usr/share/cmake-2.8/Modules/FindQt4.cmake:619 (message):
  Could NOT find QtCore.  Check
  /home/simongroth/Projects/pgCrazyMachinesVR/src-build2/CMakeFiles/CMakeError.log
  for more details.
Call Stack (most recent call first):
  Views/LevelEditor/CMakeLists.txt:32 (FIND_PACKAGE)


CMake Warning at /usr/share/cmake-2.8/Modules/FindQt4.cmake:615 (message):
  /usr/bin/qmake-qt4 reported QT_INSTALL_LIBS as "/usr/lib/x86_64-linux-gnu"
  but QtCore could not be found there.  Qt is NOT installed correctly for the
  target build environment.
Call Stack (most recent call first):
  Views/LevelEditor/CMakeLists.txt:32 (FIND_PACKAGE)

-- Boost version: 1.49.0
-- Found the following Boost libraries:
--   thread
-- Configuring incomplete, errors occurred!

This is my CMakeLists.txt. Does anyone have any idea how to use qt4 and qt5 at the same time on the new ubuntu? Thanks in advance.

FILE(GLOB COLLECTED_HDR_FILES *.hpp)
FILE(GLOB COLLECTED_SRC_FILES *.cpp)
FILE(GLOB COLLECTED_UI_FILES *.ui)
FILE(GLOB COLLECTED_RCS_FILES *.qrc)

SET( SRCS
${COLLECTED_SRC_FILES}
)

SET( HDRS
${COLLECTED_HDR_FILES}
)

SET( MOC_HDRS
${HDRS}
)

SET( UIS
${COLLECTED_UI_FILES}
)

SET( RCS
${COLLECTED_UI_FILES}
MainWindow.qrc
)

# enable warnings
ADD_DEFINITIONS(-Wall)

# this command finds Qt4 libraries and sets all required variables
# note that it's Qt4, not QT4 or qt4
FIND_PACKAGE(Qt4 REQUIRED)
FIND_PACKAGE(OpenGL REQUIRED)

# by default only QtCore and QtGui modules are enabled
# other modules must be enabled like this:
SET(QT_USE_QTXML TRUE)
SET(QT_USE_QTOPENGL TRUE)

# add some useful macros and variables
# (QT_USE_FILE is a variable defined by FIND_PACKAGE( Qt4 ) that contains a path to CMake script)
INCLUDE( ${QT_USE_FILE} )

# this command will generate rules that will run rcc on all files from SAMPLE_RCS
# in result SAMPLE_RC_SRCS variable will contain paths to files produced by rcc
QT4_ADD_RESOURCES( RC_SRCS ${RCS} )

# this will run uic on .ui files:
QT4_WRAP_UI( UI_HDRS ${UIS} )

# and finally this will run moc:
QT4_WRAP_CPP( MOC_SRCS ${MOC_HDRS} ${UI_HDRS} )

# we need this to be able to include headers produced by uic in our code
# (CMAKE_BINARY_DIR holds a path to the build directory, while INCLUDE_DIRECTORIES() works just like INCLUDEPATH from qmake)
INCLUDE_DIRECTORIES( ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${OPENGL_INCLUDE_DIR})

# here we instruct CMake to build executable from all of the source files
ADD_EXECUTABLE( LevelEditor ${HDRS} ${SRCS} ${MOC_SRCS} ${RC_SRCS} ${UI_HDRS} )

# last thing we have to do is to tell CMake what libraries our executable needs,
# luckily FIND_PACKAGE prepared QT_LIBRARIES variable for us:
TARGET_LINK_LIBRARIES( LevelEditor ${QT_LIBRARIES} ${OPENGL_LIBRARIES})

Best Answer

adding qt5 to CMakeLists.txt is different from qt4, you can find many useful link like this, by the way version of my ubuntu is 12.04 and i installed the qt without apt-get, i use this format to find qt in my cmakelists.txt :

find_package(Qt5Widgets)

include_directories(${Qt5Widgets_INCLUDES}
/opt/Qt5.0.2/5.0.2/gcc/include/QtGui
/opt/Qt5.0.2/5.0.2/gcc/include/QtCore
/opt/Qt5.0.2/5.0.2/gcc/include/QtNetwork
/opt/Qt5.0.2/5.0.2/gcc/include/QtWidgets
/opt/Qt5.0.2/5.0.2/gcc/include/QtWebKit
/opt/Qt5.0.5/5.0.5/gcc/include/QtScript
)

add_definitions(${Qt5Widgets_DEFINITIONS})

set(CMAKE_CXX_FLAGS "${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS} -I/opt/Qt5.0.2/5.0.2`    /gcc/include -L/opt/Qt5.0.2/5.0.2/gcc/lib -DQT5")`

you should replace address of your header files with my address and also you should use target_link_libraries in this way:

target_link_libraries(LevelEditor ${OPENGL_LIBRARIES} ${Qt5Widgets_LIBRARIES})
Related Topic