使用Makefile时如何修复.h文件中变量的多个定义

时间:2019-06-27 11:46:43

标签: c makefile

我的项目有五个文件,三个.c和两个.h,下面是它们的#include结构。

main.c

    #include state_machine.h
    #include input_stack.h

state_machine.c

    #include state_machine.h
    #include input_stack.h

input_stack.c

    #include input_stack.h

我正在使用有效的gcc -W main.c命令创建a.out文件。当我开始使用Makefile时,出现multiple definition of ...错误。

我所有的头文件都具有如下所示的头保护:

    #ifndef NAME_H
    #define NAME_H
    code ...
    #endif /* NAME_H */

我也尝试过添加.c文件而不是.h

还根据this question使用了extern方法。

Makefile

    CC= gcc
    CFLAGS+= -Wall -g

    tag : main.o stateMachine.o inputStack.o
            cc -o tag main.o stateMachine.o inputStack.o

    main.o : main.c
            cc -c main.c

    stateMachine.o : stateMachine.c stateMachine.h
            cc -c stateMachine.c

    inputStack.o : inputStack.c inputStack.h
            cc -c inputStack.c

    clean :
            rm tag main.o stateMachine.o inputStack.o

运行make命令后出现错误消息

    cc -o tag main.o stateMachine.o inputStack.o
    stateMachine.o:(.data.rel.local+0x0): multiple definition of `state'
    main.o:(.data.rel+0x0): first defined here
    stateMachine.o:(.data+0x0): multiple definition of `state_transitions'
    main.o:(.data+0x0): first defined here
    inputStack.o:(.data+0x0): multiple definition of `top'
    main.o:(.data+0x90): first defined here
    collect2: error: ld returned 1 exit status
    Makefile:5: recipe for target 'tag' failed
    make: *** [tag] Error 1

0 个答案:

没有答案