OpenGL 的環境配置與編譯所用的 makefile
使用 freeglut 與 glew 來建構 openGL 開發環境以及建置時使用的 makefile。
檔案架構
先建立一個資料夾
test
(或是你自己想用的名稱),再在裡面建立
include
與 lib
兩個資料夾。其中
include
之後會放標頭檔、lib
之後會放函式庫。
到目前的檔案架構長這樣
test
├─include
└─lib
下載 freeglut 與 glew
- freeglut
- 開啟 freeglut 的 官網
- 找到 Prepackaged Releases 的段落。進入 Martin Payne’s Windows binaries (MSVC and MinGW) 。
- 下載 MinGW 的版本並解壓縮
- glew
- 開啟 glew 的 官網
- 直接下載編譯好的 binary 並解壓縮
配置 freeglut 與 glew
- freeglut
- 將
freeglut/include
中的GL
資料夾複製到test/include
- 將
freeglut/lib/x64
中的libfreeglut.a
複製到test/lib
- 將
freeglut/bin/x64
中的freeglut.dll
複製到test
- 將
- glew
- 將
glew/include/GL
中的所有檔案複製到test/include/GL
- 將
glew/lib/Release/x64
中的glew32.lib
複製到test/lib
- 將
glew/bin/Release/x64
中的glew32.dll
複製到test
- 將
如果你的 MinGw
是32位元的版本的話,.lib
、.dll
與
.a
就都改成複製 32位元的版本。
最後整體的檔案架構如下
test
│ freeglut.dll
│ glew32.dll
│
├─include
│ └─GL
│ eglew.h
│ freeglut.h
│ freeglut_ext.h
│ freeglut_std.h
│ glew.h
│ glut.h
│ glxew.h
│ wglew.h
│
└─lib
glew32.lib
libfreeglut.a
到這邊 OpenGL 的環境設置就已經好了,接下來寫編譯用的 makefile。
Makefile
由於 opengl 是外部的函式庫,在編譯(compile)時需要有函式的宣告;在連結(linking)時需要函式庫。
要指定導入(include)的檔案的位置需要用到 -I
指令;而指定函式庫的檔案位置是用 -L
指令。
以下是完整的 makefile,可以複製過去放在 test
資料夾中。
CXX = g++
CFLAGS = -O2 -Wall # 編譯參數
INCPATH = -Iinclude # include 的位置
LDPATH = -Llib # load 函式庫的位置
SRCS = main.cpp # 需要編譯的檔案
EXEC = main # 執行檔名稱
OBJ = ${SRCS:.cpp=.o}
LDFLAGS = -lfreeglut -lglew32 -lopengl32
all: $(EXEC)
$(EXEC): ${OBJ}
$(CXX) -o $@ $^ $(LDPATH) $(LDFLAGS)
%.o: %.cpp
$(CXX) $(CFLAGS) $(INCPATH) -c $< -o $@
run:
$(EXEC).exe
clean:
-del -rf *.o
測試與執行
可以從這裡下載測試的程式碼,將其放在
test
資料夾中。
直接在test
開啟cmd執行make進行編譯,沒有問題的話應該會出現
g++ -O2 -Wall -Iinclude -c main.cpp -o main.o
g++ -o main main.o -Llib -lfreeglut -lglew32 -lopengl32
接著執行 make run
,出現以下的畫面就表示成功了!