Обновите CMakeLists QT4 до QT5 - PullRequest
0 голосов
/ 07 июня 2018

Я использовал старый CMakeLists пакета, основанного на QT4:

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

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Вот как использовать 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)
find_package(OpenCV REQUIRED)

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

target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_14)

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

Это прекрасно работает для меня.Надеюсь, что это полезно

0 голосов
/ 07 июня 2018

Вы получаете эти ошибки, потому что исходный файл, который компилируется в то время, использует QImage, но компилятор может видеть только предварительное объявление, а не полное определение класса.

Для источникарассматриваемый файл (ы), который необходимо добавить (при условии, что ваши пути включения правильны) ...

#include <QImage>

Ранее, при использовании Qt4 заголовок QImage, вероятно, был транзитивно включен одним издругие заголовочные файлы Qt, поэтому ошибки не было.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...