makefile中主函数的多重定义

makefile中主函数的多重定义,makefile,main,Makefile,Main,我已经编写了这个make文件,当我试图执行它时,gcc编译器出现错误 cc=gcc CFLAGS=-I LDLIBS=-lpthread OBJECTS= MP.o serial.o MT.o program:$(OBJECTS) $(cc) $(CFLAGS) $(OBJECTS) $(LDLIBS) -o program 这就是错误的信息 gcc -I MP.o serial.o MT.o -lpthread -o program MT.o: In function `mai

我已经编写了这个make文件,当我试图执行它时,gcc编译器出现错误

 cc=gcc
CFLAGS=-I
LDLIBS=-lpthread
OBJECTS= MP.o serial.o MT.o
program:$(OBJECTS)
    $(cc) $(CFLAGS) $(OBJECTS) $(LDLIBS) -o program 
这就是错误的信息

gcc -I MP.o serial.o MT.o -lpthread -o program 
MT.o: In function `main':
MT.c:(.text+0x2bf): multiple definition of `main'
serial.o:serial.c:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status
make: *** [program] Error 1
我确信这3个文件各自没有错误
谁能告诉我我的make文件有什么问题吗

谁能告诉我我的make文件有什么问题吗

错误不在makefile中,请读取链接器错误:

MT.c:(.text+0x2bf): multiple definition of `main'
serial.o:serial.c:(.text+0x0): first defined here
它告诉您,
main
定义了两次,首先在
serial.c
中,然后在
MT.c

问题出在程序中,而不是生成文件中


(您也有一个损坏的CFLAGS变量,没有路径,但这不是主要问题。)

首先,添加没有目录的
-I
会被损坏。如果需要当前目录,请取出
-I
或使用类似
-I.
的内容。其次,链接器错误表示您已经在
MT.c
serial.c
文件中定义了函数
main
。一个程序只能有一个
main
函数,因此不能在链接到单个程序的两个位置定义该函数。