---恢复内容开始---html
本文写做目的:ios
是因为本人参考 csdn原文 的方法配置环境时踩了不少坑,因此在此写一篇文防止之后用到。git
Xcodegithub
CMakexcode
Xcode通常Mac用户都安装了。函数
1. 在终端键入 xcode-select --install 安装Xcode command Line Tools, 里面包含了不少Apple打包的经常使用工具,必定要安装。工具
2. 本人踩的第一个坑是macOS Mojave把 /usr/local/ 路径下的 include 和 lib 文件夹移除了,后面配置会找不到,因此咱们先在终端键入 cd /Library/Developer/CommandLineTools/Packages/ 而后键入 open macOS_SDK_headers_for_macOS_10.14.pkg 来将头文件和库文件安装到 /usr/include ; /usr/lib 。测试
3. 后面的步骤会涉及往 include 文件夹和 lib 文件夹里添加文件的操做,这两个文件夹是连系统管理员都禁止修改的 ,因此咱们必须按如下步骤赋予咱们操做的权限:网站
(1) 重启ui
(2) 启动当即按住 command + r , 进入恢复模式 ,在恢复模式里打开终端 , 键入 csrutil disable
(3) 重启
4. 以后安装CMake下载CMake ,下载macOS版本的dmg安装文件 , 安装CMake
5. 进入 下载GLFW ,下载GLFW的Source Package (源代码)
6. 根据 learnopgl网 “建立窗口”下方的CMake部分,将你下载的GLFW文件夹进行编译(记得在这个文件夹里再新建一个叫build的文件夹,用做CMake的编译目标文件夹)。编译完成后浏览一下 build/src ,里面有一个 libglfw3.a 文件,将它复制进 /usr/lib 文件夹中
7. 终端cd进你的build目录,依次键入 make 与 make install , 完成后关闭终端
8. 进入glad 在线服务 网站, 将语言(Language)设置为C/C++,在API选项中,选择3.3以上的OpenGL(gl)版本(咱们的教程中将使用3.3版本,但更新的版本也能正常工做)。以后将模式(Profile)设置为Core,而且保证生成加载器(Generate a loader)的选项是选中的。如今能够先忽略拓展(Extensions)中的内容。都选择完以后,点击生成(Generate)按钮来生成库文件。而后在文件列表里点击glad.zip文件进行下载。
9. 下载后的压缩包有两个头文件文件夹(glad和KHR)和一个 glad.c 文件,解压出来 , 将此两个头文件文件夹与以前编译的glfw根目录里的include文件夹里的GLFW文件夹一并复制进 /usr/include 文件夹中 (重点)
10. 打开Xcode,新建一个macOS下的command Line tool工程,语言选择C++,进入工程配置(假设咱们的工程就叫OpenGL):
(1) 在左侧文件栏右键(工程名)文件夹
选择 Add files to "(工程名)" , 将以前解压的 glad.c 文件添加进来,此文件实现了 glad.h 中的大量功能
(2) 左键点击(工程名)文件夹上方的(工程名),进入配置界面
首先如图在搜索框输入search,找到两个配置头文件和库文件的选项,双击它们来添加咱们的路径:
而后咱们移动到 Build Phases 选项卡,在 Link Binary With Libraries 中将五个 .framework 以及咱们拷贝进lib的 libglfw3.a 文件添加进咱们的工程 : (注意,五个framework文件能够直接在弹出的搜索框里搜索到,可是 libglfw3.a 须要咱们手动点击 Add other 并在 /usr/bin 中找到)
如今,咱们离成功不远了,在文件列表里新建一个 main.cpp , 添加以下内容测试( glad.h必须在glfw3.h上面 ):
#include <glad/glad.h> #include <GLFW/glfw3.h>
int main()
{
return 0;
}
此时有必定的可能Xcode会提示找不到这两个头文件,我就是踩了这个坑,明明配置里已经写清楚了怎么有这种神经错误.....
个人解决方案是,将 /usr/ 下的include和lib文件夹直接拷贝到一个你认为合适的地方,再在Xcode配置里改成你的路径。
如今,我猜你的Xcode已经能成功编译了,将你的 main.cpp 的内容改成我引用的csdn博主的代码来测试:
// System Headers #include <glad/glad.h> #include <GLFW/glfw3.h> // Standard Headers #include <cstdio> #include <cstdlib> #include <iostream> void framebuffer_size_callback(GLFWwindow* window, int width, int height);//回调函数原型声明 void processInput(GLFWwindow *window); // settings const unsigned int SCR_WIDTH = 800; const unsigned int SCR_HEIGHT = 600; int main(int argc, char * argv[]) { //初始化GLFW glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); #ifdef __APPLE__ glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // uncomment this statement to fix compilation on OS X #endif //建立一个窗口对象 GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "FirstGL", NULL, NULL); if (window == NULL) { std::cout << "Failed to create GLFW window" << std::endl; glfwTerminate(); return -1; } //通知GLFW将咱们窗口的上下文设置为当前线程的主上下文 glfwMakeContextCurrent(window); //对窗口注册一个回调函数,每当窗口改变大小,GLFW会调用这个函数并填充相应的参数供你处理 glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); //初始化GLAD用来管理OpenGL的函数指针 if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { std::cout << "Failed to initialize GLAD" << std::endl; return -1; } //渲染循环 while(!glfwWindowShouldClose(window)) { // 输入 processInput(window); // 渲染指令 glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); // 检查并调用事件,交换缓冲 glfwSwapBuffers(window);//检查触发事件 glfwPollEvents(); //交换颜色缓冲 } //释放/删除以前的分配的全部资源 glfwTerminate(); return EXIT_SUCCESS; } //输入控制,检查用户是否按下了返回键(Esc) void processInput(GLFWwindow *window) { if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) glfwSetWindowShouldClose(window, true); } // 当用户改变窗口的大小的时候,视口也应该被调整 void framebuffer_size_callback(GLFWwindow* window, int width, int height) { // 注意:对于视网膜(Retina)显示屏,width和height都会明显比原输入值更高一点。 glViewport(0, 0, width, height); } --------------------- 做者:milletluo 来源:CSDN 原文:https://blog.csdn.net/lm409/article/details/78420044 版权声明:本文为博主原创文章,转载请附上博文连接!
不出意外的话,运行成功会出现一个啥也没有的绿色窗口,代表咱们大功告成了!