---恢復內容開始---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 版權聲明:本文爲博主原創文章,轉載請附上博文連接!
不出意外的話,運行成功會出現一個啥也沒有的綠色窗口,代表咱們大功告成了!