2017-03-21 42 views
1

我正在寫一個模擬器程序,我需要一個圖形庫。我有4個文件,圖形庫GLWF3安裝在我的includes文件夾中。我正在使用MacOs優勝美地。我無法弄清楚如何讓makefile工作,但包含glfw3庫。提前致謝! 還要注意的唯一文件包括GLWF3是graphics.h中 的Makefile爲GLFW3寫一個make文件

OBJ = graphics.o chip8.o 

emulator: $(OBJ) 
    gcc -o emulator $(OBJ) 

graphics.o: graphics.c graphics.h 
    gcc -c graphics.c 

chip8.o: chip8.c chip8.h 
    gcc -c chip8.c 


clean: 
    rm -f $(OBJ) emulator 
+1

如果你只是用GCC本身,而不是在makefile使用你會如何做呢?對於初學者來說,在makefile中以相同的方式執行。 –

回答

1

要建立與給定庫,您必須:

  • 告訴編譯器如何找到庫頭文件
  • 告訴鏈接器哪個庫必須鏈接。

編譯

告訴哪裏是頭,你必須通過一個-I/path/to/dir選項gcc。通常情況下,廠名CFLAGS變量用於這樣做:

CFLAGS= -I/path/to/glwf/include/dir 

graphics.o: graphics.c graphics.h 
    gcc -c graphics.c $(CFLAGS) 

chip8.o: chip8.c chip8.h 
    gcc -c chip8.c 

鏈接

告訴鏈接器使用什麼庫,並且它位於何處,選項-L/path/to/sofile-lthelib使用。通常在LDFLAGS變量:

警告:-l選項後,必須文件來鏈接(* .o文件)

LDFLAGS = -L/path/to/libglwf/lib/dir 
# if the so file name is "libglwf3.so", the "-l" option must be "-lglwf3" 
LDFLAGS += -lglwf3 

emulator: $(OBJ) 
    gcc -o emulator $(OBJ) $(LDFLAGS) 

pkg-config

要不要得處理路徑,您可以使用pkg-config工具:此工具將幫助您設置CFLAGSLDFLAGS變量。見here的安裝說明..

因此,你的makefile會看起來像:

OBJ = graphics.o chip8.o 
# calling program "pkg-config" and store result in CFLAGS variable 
CFLAGS = $(shell pkg-config --cflags glfw3) 
# calling program "pkg-config" and store result in LDFLAGS variable 
LDFLAGS = $(shell pkg-config --ldflags glfw3) 

emulator: $(OBJ) 
    gcc -o emulator $(OBJ) $(LDFLAGS) 

graphics.o: graphics.c graphics.h 
    gcc $(CFLAGS) -c graphics.c 

chip8.o: chip8.c chip8.h 
    gcc $(CFLAGS) -c chip8.c 

clean: 
    rm -f $(OBJ) emulator 
+0

謝謝,現在它工作! – Steven