2013-09-22 36 views
0

我想寫一個用C++(OSX)編寫的OpenGL程序的makefile。簡單的C++ OpenGL程序的Makefile

現在,只有單個文件chess.cpp,但我希望將其他文件添加到項目中,所以我正在嘗試創建一個makefile,以便根據需要處理新文件。我得到這些錯誤:

clang: error: no such file or directory: 'chess.o'

clang: warning: -framework GLUT: 'linker' input unused

clang: warning: -framework OpenGL: 'linker' input unused

make: *** [chess.o] Error 1

這是我創建makefile文件。它是從我通常用於C程序的東西中借用的,所以如果它看起來很奇怪,那可能是爲什麼。我如何爲我的C++項目做這項工作?

CC = g++ 
CFLAGS = -c -g -Wall -Wextra 
DEPS = 
LDFLAGS = -framework GLUT -framework OpenGL 

all: chess 

%.o: %.cpp $(DEPS) 
     $(CC) -c -o [email protected] $< $(CFLAGS) 

chess.o: chess.cpp 
     $(CC) -c chess.cpp chess.o $(LDFLAGS) 

chess: chess.o 
     $(CC) -o chess.o (LDFLAGS) 

clean: 
     rm chess 
     rm *.o 
+1

你忘了就行了'-o'選項:'chess.o:chess.cpp $(CC)-c chess.cpp chess.o $(LDFLAGS)' 。 – Snps

回答

2

有一對夫婦的錯誤:

第一:

%.o: %.cpp $(DEPS) 
    $(CC) -c -o [email protected] $< $(CFLAGS) 

這編譯所有.cpp文件,一切都在$(DEPS)到各自.o文件。

這使得下面的行冗餘:(儘管這行追加連接標誌,它以前沒有)

chess.o: chess.cpp 
    $(CC) -c chess.cpp chess.o $(LDFLAGS) 

即便如此,線有錯誤。它缺少輸出文件選項-o。正確的語法是:

chess.o: chess.cpp 
    $(CC) -c chess.cpp -o chess.o $(LDFLAGS) 

最後:

chess: chess.o 
    $(CC) -o chess.o (LDFLAGS) 

此行缺少一個輸入參數。 Make不知道要編譯什麼。你也使用依賴文件名作爲輸出參數。選項-o後面的文件名直接指定輸出。 (LDFLAGS)也缺少$。正確的語法應爲:

chess: chess.o 
    $(CC) chess.o -o chess $(LDFLAGS) 
+0

謝謝。有一天我會真正理解makefile。不知道他們爲什麼如此困惑我。我感謝您的幫助。 – Alex

+0

您通常在編譯階段追加鏈接器標誌(即.cpp→.o),因爲當時沒有鏈接發生。 – datenwolf