Makefile提供重复错误C.

我创建了一个makefile来同时运行9个程序。

9个程序的名称是init_aim.c,register.c,sort.c,schedule.c,add.c,class_schedule.c,class_list.c,grade.c和report.c。

在我实现代码的每个文件中:

#include "aim.h" int main(){ return 0; } 

我还有一个带代码的头文件

 #ifndef AIM_H #define AIM_H #endif 

我唯一的目标是让我的makefile正常工作。 并且还添加“all:”规则。 我当前的makefile看起来像这样。

  AIS: init_aim.o register.o sort.o schedule.o add.o class_schedule.o class_list.o grade.o report.o gcc -Wall -ansi -pedantic init_aim.o register.o sort.o schedule.o add.o class_schedule.o class_list.o grade.o report.o -o AIS init_aim.o: init_aim.c aim.h gcc -Wall -ansi -pedantic -c init_aim.c -o init_aim.o register.o: register.c aim.h gcc -Wall -ansi -pedantic -c register.c -o register.o sort.o: sort.c aim.h gcc -Wall -ansi -pedantic -c sort.c -o sort.o schedule.o: schedule.c aim.h gcc -Wall -ansi -pedantic -c schedule.c -o schedule.o add.o: add.c aim.h gcc -Wall -ansi -pedantic -c add.c -o add.o class_schedule.o: class_schedule.c aim.h gcc -Wall -ansi -pedantic -c class_schedule.c -o class_schedule.o class_list.o: class_list.c aim.h gcc -Wall -ansi -pedantic -c class_list.c -o class_list.o grade.o: grade.c aim.h gcc -Wall -ansi -pedantic -c grade.c -o grade.o report.o: report.c aim.h gcc -Wall -ansi -pedantic -c report.c -o report.o 

请记住,这里的间距看起来不合适,因为代码太多了。

当我跑步时,我得到:

 gcc -Wall -ansi -pedantic -c init_aim.c -o init_aim.o gcc -Wall -ansi -pedantic -c register.c -o register.o gcc -Wall -ansi -pedantic -c sort.c -o sort.o gcc -Wall -ansi -pedantic -c schedule.c -o schedule.o gcc -Wall -ansi -pedantic -c add.c -o add.o gcc -Wall -ansi -pedantic -c class_schedule.c -o class_schedule.o gcc -Wall -ansi -pedantic -c class_list.c -o class_list.o gcc -Wall -ansi -pedantic -c grade.c -o grade.o gcc -Wall -ansi -pedantic -c report.c -o report.o gcc -Wall -ansi -pedantic init_aim.o register.o sort.o schedule.o add.o class_schedule.o class_list.o grade.o report.o -o AIS clang: warning: argument unused during compilation: '-ansi' [-Wunused- command-line-argument] duplicate symbol _main in: init_aim.o register.o duplicate symbol _main in: init_aim.o sort.o duplicate symbol _main in: init_aim.o schedule.o duplicate symbol _main in: init_aim.o add.o duplicate symbol _main in: init_aim.o class_schedule.o duplicate symbol _main in: init_aim.o class_list.o duplicate symbol _main in: init_aim.o grade.o duplicate symbol _main in: init_aim.o report.o ld: 8 duplicate symbols for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [AIS] Error 1 

如果有人知道如何解决重复错误并添加“all:”命令,请告诉我。

您已在每个代码文件中定义了main()
main()是您尝试创建的可执行文件的“start here”点。
由于多个“从这里开始”点,构建失败。

换句话说:
一个可执行文件中只能有一个main()

您可能正在考虑multithreading编程。
在这种情况下,您需要对该主题进行一些研究。

您可能正在考虑从shell运行多个程序。
在这种情况下,您需要创建多个可执行文件,并使用适当的shellfunction分别启动它们,例如,用于后台执行。

如果您正在编写九个单独的程序,则不应尝试在最后将它们全部链接在一起。 我想这就是你想要的

 all: init_aim register sort schedule add class_schedule class_list grade report init_aim: init_aim.c aim.h gcc -Wall -ansi -pedantic init_aim.c -o init_aim register: register.c aim.h gcc -Wall -ansi -pedantic register.c -o register ... 

我删除了-c,删除了.o并添加了所有规则。