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

问题描述:

我开始为我的应用程序使用Qt + OpenGL。我也注意到可以使用CMake构建应用程序explained here如何让QtCreator在使用CMake构建时识别OpenGL函数的自动完成?

但是,我无法让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) 
+0

从我的经验来看,就像这样:'LIST(APPEND INCLUDES OPENGL_INCLUDE_DIRS)'尽管我不确定 – 2014-10-27 19:20:29

+0

忘记提及我在OS X下测试,但它很可能也必须在Ubuntu上工作。 – BRabbit27 2014-10-27 20:25:44

+0

这很奇怪,因为我刚刚为CUDA尝试了'INCLUDE_DIRECTORIES($ {CUDA_INCLUDE_DIRS})',并且Qt能够识别所有内容并执行自动完成,所以我错过了OpenGL库。 – BRabbit27 2014-10-27 20:28:39

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

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

因此,通过添加以下行的CMakeLists.txt

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

做出Qt来识别和自动完成OpenGL功能。

+0

即使这回答我的问题,我想问问,如果有人知道为什么设置这个变量'CMAKE_PREFIX_PATH'工作,而使用'INCLUDE_DIRECTORIES'不? – BRabbit27 2014-10-28 07:41:18