2013-05-13 113 views
4

我使用新的Ubuntu 13.04並通過apt-get install安裝qt。看來qt5現在已經安裝好了。使用qt5的CMake項目工作良好。Ubuntu 13.04 CMake和Qt4和Qt5

我有一臺在Ubuntu 12.04上安裝qt4的機器上運行的相同代碼,它運行良好。但現在我得到以下錯誤:(不要擔心升壓的東西,它來自父母的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! 

這是我的CMakeLists.txt。有沒有人知道如何在新的Ubuntu上同時使用qt4和qt5?提前致謝。

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}) 

回答

4

添加到QT5是的CMakeLists.txt從QT4不同,你可以找到許多有用的鏈接像this,通過我的Ubuntu的方式版本是12.04和我安裝了QT沒有apt-get的,我用這個格式找到QT在我的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")` 

你應該與我的地址替換頭文件中的地址,你也應該以這種方式使用target_link_libraries:

target_link_libraries(LevelEditor ${OPENGL_LIBRARIES} ${Qt5Widgets_LIBRARIES}) 
+0

的OP問Q t5通過Ubuntu中的'apt-get'安裝,而不是手動安裝。 – jackyalcine 2013-10-20 20:56:28

+0

這裏的include_directories片斷很奇怪。請參閱http://www.cmake.org/cmake/help/v3.0/manual/cmake-qt.7.html,它現在記錄查找和使用Qt 4和5.在CMake 3.0之前,您可能會遇到衝突。 – steveire 2014-04-09 18:58:58