2017-01-23 61 views
1

爲我的生活我無法得到這個使用makefile正確編譯 我有C++文件正在使用OpenGL。makefile C++與其他h文件依賴與OpenGL

一些文件依賴於他人

我有5個文件

  • 的main.cpp
  • Vector.h
  • Vector.cpp
  • Utility.cpp
  • 實用程序。 h

〜依存關係〜

IN的main.cpp

#include <GL/gl.h> 
#include <GL/glu.h> 
#include <GL/glut.h> 
#include "Vector.h" 

IN VECTOR.CPP

#include <GL/gl.h> 
#include <GL/glu.h> 
#include <GL/glut.h> 
#include "Vector.h" 
#include "Utility.h" 

IN UTILITY.CPP

#include "Utility.h" 

我的努力和安排各種標誌之後是什麼 makefile目前看起來像

program1: main.o Vector.o Utility.o 
    g++ -std=c++11 main.o Vector.o Utility.o -o program1 
main.o: main.cpp Vector.h 
    g++ -std=c++11 main.cpp -lglut -lGL -lGLU -lglut -lm 
Vector.o: Vector.cpp Vector.h Utility.h 
    g++ -std=c++11 Vector.cpp -lglut -lGL -lGLU -lglut -lm 
Utility.o: Utility.cpp Utility.h 
    g++ -std=c++11 Utility.cpp -lglut -lGL -lGLU -lglut -lm 
clean: 
    -rm -f *.o 

輸入 「make」 輸出以下結果:

g++ -std=c++11 main.cpp -lglut -lGL -lGLU -lglut -lm 
g++ -std=c++11 Vector.cpp -lglut -lGL -lGLU -lglut -lm 
    /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In (.text+0x20): undefined reference to 'main' 
    collect2: error: ld returned 1 exit status 
    makefile:6: recipe for target 'Vector.o' failed 
    make: ***[Vector.o] Error 1 

我怎樣才能解決我的makefile?謝謝

回答

2
  1. 你告訴編譯器省略-c
  2. 要鏈接庫到目標文件鏈接單個對象的文件,你只需要鏈接一旦所有的目標文件都被編譯後
  3. Make制定了規則和食譜,使用它們。
objects := main.o Vector.o Utility.o 
CXXFLAGS := -std=c++11 

program1: CC := $(CXX) 
program1: LDLIBS := -lglut -lGL -lGLU -lglut -lm 
program1: $(objects) 
    $(LINK.o) $^ $(LDLIBS) -o [email protected] 

main.o: Vector.h 
Vector.o: Vector.h Utility.h 
Utility.o: Utility.h 

.PHONY: clean 
clean: 
    $(RM) $(objects) 

如果更改main.o/main.cppprogram1.o/program1.cpp你可以擺脫program1配方完全進一步簡化。

+0

非常感謝。 – user3312266