OpenGL 的環境配置與編譯所用的 makefile

使用 freeglutglew 來建構 openGL 開發環境以及建置時使用的 makefile。

檔案架構

先建立一個資料夾 test(或是你自己想用的名稱),再在裡面建立 includelib 兩個資料夾。其中 include 之後會放標頭檔、lib 之後會放函式庫。

到目前的檔案架構長這樣

test  
├─include
└─lib

下載 freeglut 與 glew

  1. freeglut
  2. glew
    • 開啟 glew 的 官網
    • 直接下載編譯好的 binary 並解壓縮

配置 freeglut 與 glew

  1. freeglut
    • freeglut/include 中的 GL 資料夾複製到 test/include
    • freeglut/lib/x64 中的 libfreeglut.a 複製到 test/lib
    • freeglut/bin/x64 中的 freeglut.dll 複製到 test
  2. 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,出現以下的畫面就表示成功了!

Success!

參考資料