C++ makefile中出错:\ u start的多个定义

C++ makefile中出错:\ u start的多个定义,c++,makefile,C++,Makefile,我试图编写一个makefile: CC = g++ LD = ld CFLAGS = -Wall -std=c++0x -O3 LDFLAGS = -lgsl -lgslcblas -lpthread SOURCES = main.cpp OBJECTS = $(SOURCES:.cpp=.o) EXECUTABLES = main all: $(SOURCES) $(EXECUTABLES) $(EXECUTABLES): $(OBJECTS) $(CC) $(OBJECT

我试图编写一个makefile:

    CC = g++
LD = ld
CFLAGS = -Wall -std=c++0x -O3
LDFLAGS = -lgsl -lgslcblas -lpthread

SOURCES = main.cpp
OBJECTS = $(SOURCES:.cpp=.o)
EXECUTABLES = main

all: $(SOURCES) $(EXECUTABLES)
$(EXECUTABLES): $(OBJECTS)
    $(CC) $(OBJECTS) -o $@ $^ $(LDFLAGS) 

.cpp.o: 
    $(CC) $(CFLAGS) $< -o $@


.PHONY: clean
clean: 
    rm -f *~ *.o main
那么,我做错了什么,我该如何修复它?如果需要,我也可以添加我的代码。(但是当我使用
g++-Wall-O3-std=c++0x$1-lgsl-lgslcblas
编译它时,代码是有效的
谢谢大家!

  g++ main.o -o main main.o -lgsl -lgslcblas -lpthread 
      ^^^^^^         ^^^^^^

您链接了两次
main.o
,因此其中的所有内容都是重复的。

之前的响应者向您显示了一个您正在犯的错误。当您更正该错误时,一些错误消息确实会消失。您是说您有“相同的错误”。不!请仔细检查,您的错误会更少


另一个主要错误是编译
main.o
时没有使用
-c
选项。实际上,
main.o
是一个程序(与
main
类似,但名称奇怪)。该程序定义了所有系统函数,从隐式链接系统库开始。然后您尝试再次链接该程序,再次隐式链接系统库。当然,所有系统函数现在都是双重定义的。

因此我必须将行
$(CC)$(OBJECTS)-o$@$^$(LDFLAGS)
重写为
$(CC)-o$@$^$(LDFLAGS)
?但在执行此操作时,我再次遇到相同的错误。
  g++ main.o -o main main.o -lgsl -lgslcblas -lpthread 
      ^^^^^^         ^^^^^^