作為一個有理想的編程者,你肯定不想被Visual Studio這種給我們鋪好路的IDE束縛,你總有一天要完全從頭開始編程的。踩坑之路就在你的前面了,作為一個makefile新手,我希望把這些踩過的坑記錄下來,以便為以后的新手指導如何從坑里爬出來。
一開始我們必須先學會Visual Studio的方式寫Opengl程序,這里我不希望再贅述,你可以參考learnopengl-cn,或者B站傅老師的視頻教程。
如果你學會了Visual Studio式OpenGL編程,我們可以進行下一步。這是我的代碼:
1 #include <iostream> 2 #include <GLFW/glfw3.h> 3 4 int main(void) 5 { 6 GLFWwindow* window; 7 if (!glfwInit()) 8 return -1; 9 window = glfwCreateWindow(1000, 1000, "Hello World", NULL, NULL); 10 if (!window) 11 { 12 glfwTerminate(); 13 return -1; 14 } 15 glfwMakeContextCurrent(window); 16 while (!glfwWindowShouldClose(window)) 17 { 18 glfwSwapBuffers(window); 19 glfwPollEvents(); 20 } 21 glfwTerminate(); 22 return 0; 23 }
如果你成功了,你會得到一個黑色窗體,標題是hello world ,我們把代碼復制到一個新的目錄下
下面你就可以開始編譯了
這里我使用的是msys2 - 32bit,關於如何配置msys2,這里我就不贅述了,資料很多
我假設你已經安裝好了gcc make 等開發工具
這時候你cd到我們的文件目錄下,我們輸入g++ OpenGL.cpp
當然是不行的
這是因為我們沒有定義相關函數,沒有頭文件,沒有鏈接庫文件
頭文件負責聲明函數,而鏈接庫文件則是函數被定義的地方,關於函數的聲明和函數的定義你可以參考這篇文章
因此我們需要提供這兩個東西,一個頭文件,一個庫文件
恰好你在下載glfw的時候就包含了這兩個文件(glfw要下載32位的)
解壓后你會得到這一堆東西
咱們把include下的GLFW文件夾復制到跟我們的CPP文件同級
然后把lib-mingw文件夾復制到CPP同級
這樣我們大概可以得到這個結果
這里我們需要改變以下我們的g++語句了,在以前的基礎上改成
g++ OpenGL.cpp -L ./lib-mingw -lglfw3dll -lopengl32
如果你做的都對那么應該成功編譯沒有報錯,接着你輸入./a.exe就發現打開了一個黑色的窗口,啥都沒有
恭喜你,成功了
來解釋一下我們加入了什么,首先是這個-L ./lib-mingw,這個意思就是說我的程序需要到這里面找鏈接庫文件,這一步相當於我們配置visual studio時增加庫目錄
然后這個-lglfw3dll則是相當於我們修改這里
你打開lib-mingw文件,就可以看到這個文件
對應-lglfw3dll是libglfw3dll.a
到這里我想就結束了,其實關於更多這些知識你都可以通過學習makefile文件來知道,作為一個有理想的coder,你必須自己從零開始構建所有的世界,道阻且長。