Makefile出现重复错误C [英] Makefile Giving Duplicate Error C

查看:90
本文介绍了Makefile出现重复错误C的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have created a makefile to run 9 programs simultaneously.

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

The names of the 9 programs are init_aim.c, register.c, sort.c, schedule.c, add.c, class_schedule.c, class_list.c, grade.c, and report.c.

在每个文件中,我都实现了代码:

In each of the files I have implemented the code:

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

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

I also have a header file with the code

#ifndef AIM_H
#define AIM_H
#endif

我唯一的目标是使我的makefile正常工作.并添加"all:"规则.我当前的makefile看起来像这样.

My only goal is to get my makefile working. And also add the "all:" rule. My current makefile looks like this.

    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

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

Please keep in mind the spacing does not look proper on here because there is too much code.

当我运行make时,我得到:

When I run make I get:

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:"命令,请告诉我.

If anyone knows how to solve the duplicate error and add the "all:" command please let me know.

推荐答案

如果要编写9个单独的程序,则不要在最后尝试将它们链接在一起.我想这就是你想要的

If you are writing nine separate programs you shouldn't try to link them all together at the end. I think this is what you want

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并添加了全部规则.

I removed -c, removed .o and added the all rule.

这篇关于Makefile出现重复错误C的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆