与OpenGL

时间:2017-01-23 02:12:18

标签: c++ opengl makefile

对于我的生活,我无法使用makefile正确编译 我有使用OpenGL的c ++文件。

某些文件依赖于其他文件

我有5个文件

  • main.cpp
  • Vector.h
  • Vector.cpp
  • Utility.cpp
  • Utility.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?谢谢

1 个答案:

答案 0 :(得分:3)

  1. 您告诉编译器通过省略-c
  2. 来链接单个目标文件
  3. 您将库链接到目标文件,只需在编译完所有目标文件后链接一次
  4. Make已内置规则和配方,请使用它们。
  5. 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食谱来进一步简化操作。