我正在参加的大学课程中,我们开始使用OpenGL。教授让我们下载了GLAD和GLFW,但是我们没有看到如何使用makefile在VS Code中包括所有内容并使它们工作(在Windows 10 64位系统上使用makefile和mingw-w64编译器)。我正在按照OpenGL指南编写一个简单的代码:
#include "glad/glad.h"
#include "glfw3.h"
int main(int argc, char* argv[])
{
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
return 0;
}
GLAD头文件位于:
C:\ libs \ Glad \ include \ glad
GLFW库位于:
C:\ libs \ GLFW \ glfw-3.3.2.bin.WIN64 \ lib-mingw-w64
并且在此目录中,有3个文件:
glfw3.dll
libglfw3.a
libglfw3dll.a
在GLFW目录中,还有一个“包含”文件夹:
C:\ libs \ GLFW \ glfw-3.3.2.bin.WIN64 \ include \ GLFW
带有两个头文件:
glfw3.h
glfw3native.h
我在VS Code中的C ++项目中所做的第一件事是修改“ c_cpp_properties.json”文件,包括我包含在.cpp中的文件的相对路径。我还包含了库的路径,尽管最后,在代码中,我仅包含了头文件:
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"C:/libs/Glad/include/**",
"C:/libs/GLFW/glfw-3.3.2.bin.WIN64/include/GLFW/",
"C:/libs/GLFW/glfw-3.3.2.bin.WIN64/lib-mingw-w64/"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "C:\\MinGW-64\\mingw64\\bin\\gcc.exe",
"cStandard": "c11",
"cppStandard": "c++20",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
此时,我复制并粘贴了一个makefile文件,该文件向我们显示了教授,仅用于编译.cpp,将.o和最终结果(.exe)链接在一起。在这种情况下,我们从未见过要在makefile中写入什么内容(我很确定问题出在makefile中),此外,我们对makefile的研究时间还不够长,无法单独运行。这是makefile:
CC = g++
DEBUG = -g -std=c++2a
CFLAGS = -Wall -c $(DEBUG)
LFLAGS = -Wall $(DEBUG)
ODIR = obj
OBJS = $(ODIR)/First_Window.o
LINK_TARGET = First_Window.exe
all : $(LINK_TARGET)
echo All done
$(LINK_TARGET) : $(OBJS)
$(CC) $(LFLAGS) $^ -o $@
$(ODIR)/%.o : %.cpp
$(CC) $(CFLAGS) $< -o $@
从终端编译:
g++ -Wall -c -g -std=c++2a First_Window.cpp -o obj/First_Window.o
First_Window.cpp:1:10: fatal error: glad/glad.h: No such file or directory
#include "glad/glad.h"
^~~~~~~~~~~~~
compilation terminated.
mingw32-make: *** [makefile:17: obj/First_Window.o] Error 1
即使在我所遵循的同一本书中,我发现的所有指南也都引用了VS社区,但是自从本课程开始以来,我们就一直使用VS Code。我应该修改/添加什么来解决该问题?
提前谢谢您
哦,我刚刚看到了高兴的文件夹在哪里,所以请尝试克服第一个错误:
CC = g++
DEBUG = -g -std=c++2a
CFLAGS = -Wall -c $(DEBUG)
LFLAGS = -Wall $(DEBUG)
ODIR = obj
OBJS = $(ODIR)/First_Window.o
INCLUDE = -IC:\libs\Glad\include\glad
LINK_TARGET = First_Window.exe
all : $(LINK_TARGET)
echo All done
$(LINK_TARGET) : $(OBJS)
$(CC) $(LFLAGS) $^ -o $@
$(ODIR)/%.o : %.cpp
$(CC) $(INCLUDE) $(CFLAGS) $< -o $@
我在其中添加了glad文件夹的包含路径。您还可以添加任何其他标题路径:
INCLUDE = -IC:\libs\Glad\include\glad -IC:\libs\GLFW\glfw-3.3.2.bin.WIN64\include\GLFW