Хобрук: Ваш путь к мастерству в программировании

Укажите cmake use qt4 для сборки opencv

На моем компьютере с Ubuntu были установлены как qt4, так и qt5 из-за совместимости с некоторыми библиотеками. В настоящее время я хочу перестроить opencv с помощью qt4 (для highgui). Но cmake всегда использует qt5 (версия по умолчанию). Я редактировал CMakeLists.txt

find_package(Qt4 COMPONENTS QTCORE QTGUI)
// I remove HAVE_QT5 variable
if(HAVE_QT)
  status("    QT 4.x:"            HAVE_QT        THEN "YES (ver ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH} ${QT_EDITION})" ELSE NO)
  status("    QT OpenGL support:" HAVE_QT_OPENGL THEN "YES (${QT_QTOPENGL_LIBRARY})" ELSE NO)
else()
...................

После того, как я перестроил opencv, я проверяю зависимости с помощью ldd libopencv_highgui.so

libQt5Core.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007f4e5245a000) libQt5Gui.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 ( 0x00007f4e51e0d000) libQt5Widgets.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 (0x00007f4e515e4000) libQt5Test.so.5 => /usr/lib/x86_64-linux-t5Tu/lib 5 (0x00007f4e513bb000) libQt5OpenGL.so.5 => /usr/lib/x86_64-linux-gnu/libQt5OpenGL.so.5 (0x00007f4e51157000)

Highgui по-прежнему ссылается на Qt5. Кто-нибудь может мне помочь ? Спасибо !

07.08.2015

  • Вы очистили кеш CMAKE? Удаление переменных из скрипта не удаляет их из кеша. Взгляните на cmake -LA. 07.08.2015
  • Я неправильно понимаю переменную HAVA_QT в CMakeLists.txt. Эта переменная имеет значение true, если параметры командной строки cmake содержат WITH_QT = ON. Я думаю, что cmake всегда использует qmake по умолчанию, поэтому мое решение временно удаляет qt5. 10.08.2015

Ответы:


1

Для работы с обеими версиями Qt используйте переменные *FOUND.

# QtWidgets 5
find_package(Qt5Widgets)
if(Qt5Widgets_FOUND)
    set(QT5_FOUND TRUE)
    set(QT5_INCLUDE_DIRS "${Qt5Widgets_INCLUDE_DIRS}")
    set(QT5_LIBRARIES "${Qt5Widgets_LIBRARIES}")

# QtGui 4
find_package(Qt4 ${MINIMUM_REQUIRED_QT4_VERSION} COMPONENTS QtCore QtGui)
if(QT_FOUND)
    set(QT4_FOUND TRUE)
    set(QT4_INCLUDE_DIRS "${QT_INCLUDE_DIR};${QT_QTCORE_INCLUDE_DIR};${QT_QTGUI_INCLUDE_DIR}")
    set(QT4_LIBRARIES "${QT_QTCORE_LIBRARY};${QT_QTGUI_LIBRARY}")

Как видите, теперь у вас есть обе версии, и вы можете использовать соответствующие переменные include / library.

10.08.2015
Новые материалы

Учебные заметки JavaScript Object Oriented Labs
Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

Разбор строк запроса в vue.js
Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
«Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..