使用 CMake 构建时如何使 QtCreator 识别 OpenGL 函数的自动完成功能?

Posted

技术标签:

【中文标题】使用 CMake 构建时如何使 QtCreator 识别 OpenGL 函数的自动完成功能?【英文标题】:How to make QtCreator recognize autocompletion for OpenGL functions when building with CMake? 【发布时间】:2014-10-27 18:42:03 【问题描述】:

我开始为我的应用程序使用 Qt+OpenGL。我还注意到可以使用 CMake 将应用程序构建为 explained here

但是,我无法让 Qt 识别用于自动完成的 OpenGL 函数。应用程序可以正确构建并且可以正常运行。

有什么我必须添加到 CMake 文件或 Qt 中的设置才能获得自动完成功能吗?

如果需要,这是我的 CMakeLists.txt

CMAKE_MINIMUM_REQUIRED( VERSION 2.8 )

PROJECT( QtOpenGLTemplate )

FIND_PACKAGE( Qt5Widgets REQUIRED )
IF( Qt5Widgets_FOUND )
    MESSAGE( STATUS "Qt5 Widgets module FOUND!" )
ELSE()
    MESSAGE( WARNING "Qt5 Widgets module NOT FOUND!" )
ENDIF()

FIND_PACKAGE( Qt5OpenGL REQUIRED )
IF( Qt5OpenGL_FOUND )
    MESSAGE( STATUS "Qt5 OpenGL module FOUND!" )
ELSE()
    MESSAGE( WARNING "Qt5 OpenGL module NOT FOUND!" )
ENDIF()

FIND_PACKAGE( OpenGL REQUIRED )
IF( OPENGL_FOUND )
    MESSAGE( STATUS "OpenGL FOUND!" )
ELSE()
    MESSAGE( WARNING "OpenGL NOT FOUND!" )
ENDIF()

SET( SOURCES main.cpp GLViewer.cpp )

ADD_EXECUTABLE( QtOpenGLTemplate $SOURCES )
TARGET_LINK_LIBRARIES( QtOpenGLTemplate $OPENGL_LIBRARIES Qt5::Widgets Qt5::OpenGL )

【问题讨论】:

根据我的经验,它类似于:LIST(APPEND INCLUDES OPENGL_INCLUDE_DIRS) 虽然我不确定 忘了说我在 OS X 下测试,但它很可能也必须在 Ubuntu 上运行。 这很奇怪,因为我刚刚为 CUDA 尝试了INCLUDE_DIRECTORIES( $CUDA_INCLUDE_DIRS ),Qt 可以识别所有内容并自动完成,所以我缺少 OpenGL 库的一些内容。 【参考方案1】:

我在Qt's CMake manual找到了答案

为了使 find_package 成功,必须在下面找到 Qt 5 CMAKE_PREFIX_PATH 或 Qt5_DIR 必须在 CMake 中设置 缓存到 Qt5WidgetsConfig.cmake 文件的位置。最简单的 使用 CMake 的方法是设置 CMAKE_PREFIX_PATH 环境变量 到 Qt 5 的安装前缀。

所以通过将以下行添加到 CMakeLists.txt

SET(CMAKE_PREFIX_PATH "$CMAKE_PREFIX_PATH /Applications/Qt/5.3/clang_64")

让 Qt 能够识别和自动完成 OpenGL 函数。

【讨论】:

即使这回答了我的问题,我想问一下是否有人知道为什么设置此变量 CMAKE_PREFIX_PATH 有效,而使用 INCLUDE_DIRECTORIES 无效?

以上是关于使用 CMake 构建时如何使 QtCreator 识别 OpenGL 函数的自动完成功能?的主要内容,如果未能解决你的问题,请参考以下文章

QtCreator 无法识别 cmake

使用 cmake 部署 QtCreator

QtCreator 1.3、Qt 4.6.2 和 cmake 在 windows 上的构建问题

如何使用 qtcreator 通过 ninja 构建系统远程部署应用程序

在一个 QtCreator 版本中使用 cmake 构建失败,而它与另一个版本以及来自终端的 catkin_make 一起使用

CMake 重新编译