QT 变量用于将 Qt 模块包含到您的项目中。通过添加 opengl,您添加了 Qt OpenGL 模块,其中包含使用 OpenGL 的 Qt 代码(以及指向它的链接)。如果“包含”是指链接,那么 Qt 的 OpenGL 模块 (libQtOpenGL.so) 会链接各种 OpenGL 库。此外,Qt 模块包括 Qt OpenGL 模块的头文件,而后者又包括 OpenGL 头文件。
OpenGL 头文件和 OpenGL 库位于您的操作系统保留的任何位置。你的项目知道这些在哪里,因为你的平台有 Qt mkspecs,不管它是什么。在 mkspecs 中,包含路径和链接路径已经包含在内。
例如,现在我在 Mac OS X 上,Qt mkspecs 安装在 /usr/local/Qt4.8/mkspecs 中。这里我有所有的平台描述,在 common 下你可以找到 mac.conf,这是我平台描述的一部分。在里面你可以看到:
QMAKE_INCDIR_OPENGL = /System/Library/Frameworks/OpenGL.framework/Headers \
/System/Library/Frameworks/AGL.framework/Headers/
当要求 Qt Creator (qmake) 为任何应用程序生成 Makefile 时,将使用此信息。这样,您的应用程序就知道在哪里可以找到 OpenGL 的标头。仅当您添加 opengl 模块时,您的项目才会自动将其添加到包含路径中。
作为另一个示例,这是 Linux 平台定义的一部分:
...
QMAKE_INCDIR =
QMAKE_LIBDIR =
QMAKE_INCDIR_X11 = /usr/X11R6/include
QMAKE_LIBDIR_X11 = /usr/X11R6/lib
QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS]
QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS]
QMAKE_INCDIR_OPENGL = /usr/X11R6/include
QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib
QMAKE_INCDIR_OPENGL_ES1 = $$QMAKE_INCDIR_OPENGL
QMAKE_LIBDIR_OPENGL_ES1 = $$QMAKE_LIBDIR_OPENGL
QMAKE_INCDIR_OPENGL_ES2 = $$QMAKE_INCDIR_OPENGL
QMAKE_LIBDIR_OPENGL_ES2 = $$QMAKE_LIBDIR_OPENGL
QMAKE_INCDIR_EGL =
QMAKE_LIBDIR_EGL =
QMAKE_INCDIR_OPENVG =
QMAKE_LIBDIR_OPENVG =
...
我想你可以自己理解这意味着什么;-)
因此,回答您的问题:OpenGL 库的包含路径和链接路径包含在 Makefile 中,为您的应用程序生成,获取存储在系统某处的 mkspec 文件中的信息。实际的 OpenGL 头文件和库位于系统的默认位置,这与 Qt 本身无关。如果您直接使用 OpenGL 库,则可能需要在源代码中包含标头(或者您可能不需要,这取决于),但包含路径应该已经由您的 mkspec 文件提供。
编辑:看看添加 opengl 模块时会自动发生什么:这是 Qt Creator 用于编译没有 opengl 模块的 C++ 文件的命令行(在 Mac 上):
g++ -c -pipe -g -gdwarf-2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -Wall -W -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Qt4.8/mkspecs/macx-g++ -I../TextEdit -I/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/usr/include/QtCore -I/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/usr/include/QtGui -I/usr/include -I. -I. -I../TextEdit -I. -F/Library/Frameworks -o main.o ../TextEdit/main.cpp
现在这是添加后发生的情况:
g++ -c -pipe -g -gdwarf-2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -Wall -W -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Qt4.8/mkspecs/macx-g++ -I../TextEdit -I/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/usr/include/QtCore -I/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/usr/include/QtGui -I/Library/Frameworks/QtOpenGL.framework/Versions/4/Headers -I/usr/include/QtOpenGL -I/usr/include -I/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/System/Library/Frameworks/AGL.framework/Headers -I. -I. -I../TextEdit -I. -F/Library/Frameworks -o main.o ../TextEdit/main.cpp
您的项目已被告知在哪里寻找 OpenGL 标头。