【问题标题】:Specify cmake use qt4 to build opencv指定cmake使用qt4构建opencv
【发布时间】:2015-10-30 14:05:59
【问题描述】:

由于与某些库的兼容性,我的 Ubuntu 计算机同时安装了 qt4 和 qt5。 目前,我想用 qt4(用于 highgui)重建 opencv。但是 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-gnu/libQt5Test.so.5 (0x00007f4e513bb000) libQt5OpenGL.so.5 => /usr/lib/x86_64-linux-gnu/libQt5OpenGL.so.5 (0x00007f4e51157000)

Highgui 仍然链接到 Qt5。 有谁能够帮我 ?谢谢!

【问题讨论】:

  • 您是否清除了 CMAKE 缓存?从脚本中删除变量不会将它们从缓存中删除。看看cmake -LA
  • 我误解了 CMakeLists.txt 中的变量 HAVA_QT。如果 cmake 命令行参数包含 WITH_QT=ON,则此变量设置为 true。我认为 cmake 总是使用默认的 qmake,所以我的解决方案是暂时删除 qt5。

标签: c++ opencv cmake


【解决方案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}")

如您所见,现在您可以使用两个版本,并且可以使用各自的包含/库变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 2011-07-03
    • 2020-08-12
    • 1970-01-01
    • 2018-05-20
    相关资源
    最近更新 更多