使用 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 1.3、Qt 4.6.2 和 cmake 在 windows 上的构建问题
如何使用 qtcreator 通过 ninja 构建系统远程部署应用程序
在一个 QtCreator 版本中使用 cmake 构建失败,而它与另一个版本以及来自终端的 catkin_make 一起使用