对于我的生活,我无法使用makefile正确编译 我有使用OpenGL的c ++文件。
某些文件依赖于其他文件
我有5个文件
〜依赖性〜
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?谢谢
答案 0 :(得分:3)
-c
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 $@
main.o: Vector.h
Vector.o: Vector.h Utility.h
Utility.o: Utility.h
.PHONY: clean
clean:
$(RM) $(objects)
如果您将main.o
/ main.cpp
更改为program1.o
/ program1.cpp
,则可以通过完全删除program1
食谱来进一步简化操作。