Makefile C++;Linux中的多定义

Makefile C++;Linux中的多定义,makefile,Makefile,当我创建这些文件时,g++会出现两个错误,即多重定义和以前的定义 生成文件: INCLUDE = -I/usr/X11R6/include/ LIBDIR = -L/usr/X11R6/lib FLAGS = -Wall CC = g++ CFLAGS = $(FLAGS) $(INCLUDE) LIBS = -lglut -lGL -lGLU glTestDemo.o: glTestDemo.cpp headers.h $(CC) $(CFLAGS) -c glTest

当我创建这些文件时,g++会出现两个错误,即多重定义和以前的定义

生成文件:

INCLUDE = -I/usr/X11R6/include/
LIBDIR  = -L/usr/X11R6/lib

FLAGS = -Wall
CC = g++
CFLAGS = $(FLAGS) $(INCLUDE)
LIBS =  -lglut -lGL -lGLU

glTestDemo.o: glTestDemo.cpp headers.h
        $(CC) $(CFLAGS) -c glTestDemo.cpp

display.o: display.cpp headers.h
        $(CC) $(CLFAGS) -c display.cpp

glTestDemo: glTestDemo.o display.o
        $(CC) $(CFLAGS) glTestDemo.o display.o -o $@ $(LIBDIR) $< $(LIBS)               # The initial white space is a tab

all: glTestDemo

clean:
        rm glTestDemo *.o
glTestDemo.cpp

#include "headers.h"

int NumPoints = 5000;

int
main (int argc, char** argv)
{
    glutInit (&argc, argv);
    glutInitDisplayMode (GLUT_RGBA);
    glutInitWindowPosition (50, 50);
    glutInitWindowSize (600, 600);
    glutCreateWindow ("Test title");
    glutDisplayFunc (incorrect_display);
    glutMainLoop ();
    return 0;
}
键入make all后出现的错误消息如下:

/usr/bin/ld: error: glTestDemo.o: multiple definition of 'NumPoints'
/usr/bin/ld: glTestDemo.o: previous definition here
/usr/bin/ld: error: glTestDemo.o: multiple definition of 'main'
/usr/bin/ld: glTestDemo.o: previous definition here
collect2: error: ld returned 1 exit status
make: *** [glTestDemo] Error 1

我制作了一个shell脚本来测试我的C++语法和G++FLAG和OpenGL标志,这是链接使用的。这就是成功。因此,我认为是Makefile导致了错误。但我找不到这方面的问题

您在glTestDemo.o中链接了两次

glTestDemo: glTestDemo.o display.o
    $(CC) $(CFLAGS) glTestDemo.o display.o -o $@ $(LIBDIR) $< $(LIBS
                                                           ^^ 

阅读有关Makefiles中特殊变量的更多信息,您将在glTestDemo.o中链接两次

glTestDemo: glTestDemo.o display.o
    $(CC) $(CFLAGS) glTestDemo.o display.o -o $@ $(LIBDIR) $< $(LIBS
                                                           ^^ 
阅读有关Makefiles中特殊变量的更多信息

glTestDemo: glTestDemo.o display.o
    $(CC) $(CFLAGS) glTestDemo.o display.o -o $@ $(LIBDIR) $< $(LIBS
                                                           ^^ 
glTestDemo: glTestDemo.o display.o
    $(CC) $(CFLAGS) $^ -o $@ $(LIBDIR) $(LIBS)