如何在 CMake 中使用 OpenGL/Angle 编译 QtGui 示例?

Posted

技术标签:

【中文标题】如何在 CMake 中使用 OpenGL/Angle 编译 QtGui 示例?【英文标题】:How to compile QtGui example with OpenGL/Angle in CMake? 【发布时间】:2014-02-28 15:09:37 【问题描述】:

我正在尝试从examples/gui/openglwindow/中的Qt-distribution中获取Qt示例,并使其在Windows上使用CMake编译/运行。但是,在编译时,它失败了一堆 “错误 LNK2019:无法解析的外部符号 __imp_glClear”

我可以通过手动将 C:\Qt_install\lib\libGLESv2d.lib 添加到链接器路径来解决这个问题,但是,这显然不是 CMake 应该如何工作的。

我的 CMakeLists 很简单:

PROJECT( oglwin )
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12 )
cmake_policy(SET CMP0020 NEW) # for Qt: auto-link to qtmain.lib

set(CMAKE_AUTOMOC ON)
find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)

SET(SOURCE
 main.cpp
 openglwindow.cpp
)
SET(HEADERS
 openglwindow.h
)
ADD_EXECUTABLE( oglwin  $SOURCE $HEADERS )
TARGET_LINK_LIBRARIES( oglwin  Qt5::Core Qt5::Gui )

正如我之前提到的,我的期望是它会自动链接到 libGLESv2.lib(或 libGLESv2d.lib),因为我使用的是使用 ANGLE 构建的 Qt-build。 (就此而言,我想当在桌面/opengl 构建时,它应该链接到 GL.lib [或任何系统 openGL lib 被调用])。

在我的情况下,它还应该链接到 C:\Qt_install\lib\libEGLd.lib。

有一些相关的主题,例如: https://bugreports.qt-project.org/browse/QTBUG-29132 (它说“固定”),并且可以遵循它来gitorious: https://codereview.qt-project.org/#change,53857

所以基本上应该发生的是 QtGui 自动链接到其正确的 OpenGL 后端,无论它可能是什么(桌面 OpenGL、Angle/GLESv2),它在错误报告中说它能够推断出哪个后端从已安装的 Qt 发行版中使用。

显然我正在尝试做的事情应该有效,但事实并非如此。我做错了吗?

【问题讨论】:

【参考方案1】:

解决方法如下:

它与一个现已修复的 Qt 错误相结合,但还需要将 $Qt5Gui_EGL_LIBRARIES$Qt5Gui_OPENGL_LIBRARIES 添加到 target_link_libraries

这使 Qt 找到正确的 OpenGL 依赖项。

【讨论】:

以上是关于如何在 CMake 中使用 OpenGL/Angle 编译 QtGui 示例?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 CMake 但仅使用 make 的项目中合并使用 CMake 的仅标头库?

如何在 CMake 中正确使用 Tensorflow Lite?

如何在 Ubuntu 中使用 cmake 设置 qt4?

如何在 Visual Studio 2017、C++、CMake 中使用数据断点?

使用 cmake 时如何在 C++ 中使用库(*.a 文件)

如何在CMake构建中每次运行python脚本?