【问题标题】:Update CMakeLists QT4 to QT5将 CMakeLists QT4 更新为 QT5
【发布时间】:2018-06-07 10:42:21
【问题描述】:

我使用的是基于 QT4 的旧的 CMakeLists 包:

cmake_minimum_required(VERSION 2.8.0)
project(pol)

add_compile_options(-std=c++17)
find_package(catkin REQUIRED COMPONENTS qt_build roscpp sensor_msgs cv_bridge image_transport)
find_package(OpenCV REQUIRED)
include_directories(${catkin_INCLUDE_DIRS})

catkin_package()

rosbuild_prepare_qt4(QtCore QtGui) # Add the appropriate components to the component list here


file(GLOB QT_FORMS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ui/*.ui)
file(GLOB QT_RESOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} resources/*.qrc)
file(GLOB_RECURSE QT_MOC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS include/pol/*.hpp)

QT4_ADD_RESOURCES(QT_RESOURCES_CPP ${QT_RESOURCES})
QT4_WRAP_UI(QT_FORMS_HPP ${QT_FORMS})
QT4_WRAP_CPP(QT_MOC_HPP ${QT_MOC})


file(GLOB_RECURSE QT_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS src/*.cpp)


add_executable(pol ${QT_SOURCES} ${QT_RESOURCES_CPP} ${QT_FORMS_HPP} ${QT_MOC_HPP})
target_link_libraries(pol ${QT_LIBRARIES} ${catkin_LIBRARIES})
install(TARGETS pol RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})

现在我正在尝试迁移到 QT5 的最新版本,所以我是这样开始的:

cmake_minimum_required(VERSION 3.1.0)

project(pol)

add_compile_options(-std=c++17)

find_package(catkin REQUIRED COMPONENTS qt_build roscpp sensor_msgs cv_bridge image_transport)
find_package(OpenCV REQUIRED)
include_directories(${catkin_INCLUDE_DIRS})

catkin_package()
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt5 COMPONENTS Core Gui Widgets)

rosbuild_prepare_qt4(QtCore QtGui) # Add the appropriate components to the component list here

file(GLOB QT_FORMS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ui/*.ui)
file(GLOB QT_RESOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} resources/*.qrc)
file(GLOB_RECURSE QT_MOC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS include/fmf_qt/*.hpp)

QT5_ADD_RESOURCES(QT_RESOURCES_CPP ${QT_RESOURCES})
QT5_WRAP_UI(QT_FORMS_HPP ${QT_FORMS})

include_directories(
    ${Qt5Core_INCLUDE_DIRS}
    ${Qt5Gui_INCLUDE_DIRS}
    ${Qt5Widgets_INCLUDE_DIRS}
    )

file(GLOB_RECURSE QT_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS src/*.cpp)

add_executable(pol ${QT_SOURCES} ${QT_RESOURCES_CPP} ${QT_FORMS_HPP} ${QT_MOC_HPP})
target_link_libraries(pol Qt5::Widgets Qt5::Core ${QT_LIBRARIES} ${catkin_LIBRARIES})
install(TARGETS pol RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})

现在我收到了一些错误,我认为这是由于我的新 CMakeLists 造成的,例如

error: incomplete type ‘QImage’ used in nested name specifier
error: invalid use of incomplete type ‘class QImage’

这个包是在ROS ubuntu 18.04 LTS下开发,用gcc 8.1编译的,你知道我新的CMakeLists有什么问题吗? 该软件包与我的旧 CMakeLists 一起使用!

编辑

我正确运行cmake

cmake ../src -DCMAKE_INSTALL_PREFIX=../install -DCATKIN_DEVEL_PREFIX=../devel

但是当我运行make时出现错误

【问题讨论】:

  • 这些错误从何而来——当您运行cmake 或在生成的makefile 上调用make 时?
  • @G.M.当我运行make 时,我编辑了我的帖子
  • 在 Stack Overflow 上,我们希望代码包含在问题帖子本身中,而不是链接。请在您的问题中解决该问题。
  • @Tsyvarev 我试过了,但它说代码太多
  • 嗯,奇怪。两个代码 sn-ps 总共有不到 60 行。但更重要的是,错误在您的.cpp 代码中,而不是在CMakeLists.txt 中。 (也就是说,CMakeLists.txt 可以装袋,但 .cpp 也有窃听器)。

标签: c++ qt cmake


【解决方案1】:

这是使用 Qt 和 cmake 的方法:

    cmake_minimum_required(VERSION 3.9)

    set(CMAKE_INCLUDE_CURRENT_DIR ON)
    set(CMAKE_AUTOMOC ON)
    set(CMAKE_AUTORCC ON)

    project(QCameraBug)

    # required packages
    find_package(Qt5 COMPONENTS Core Quick Multimedia REQUIRED)

    add_executable(${PROJECT_NAME} "main.cpp" "main.qrc")

    target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_14)

    target_link_libraries(${PROJECT_NAME}
        Qt5::Core
        Qt5::Quick
        Qt5::Multimedia
    )

这对我来说非常有效。希望对您有所帮助

【讨论】:

    【解决方案2】:

    您收到这些错误是因为当时正在编译的源文件正在使用 QImage,但编译器只能看到前向声明而不是完整的类定义。

    对于有问题的源文件,您需要添加(假设您的包含路径正确)...

    #include <QImage>
    

    以前,当使用Qt4 时,QImage 标头可能被其他Qt 标头文件之一传递包含,这就是没有错误的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      相关资源
      最近更新 更多