c - 使 : duplicate symbol

标签 c makefile gnu-make

我正在写一个c程序。它包含以下文件:

啊啊

#pragma once
extern int a;

空调

int a = 1;

B.h

#pragma once
#include "A.h"

公元前

#include "B.h"

makefile 看起来像这样

生成文件:

objects = A.o B.o
main : $(objects)
    cc -Wall -o main $(objects)

当我使用“make”命令时,出现错误“A.o B.o 中的重复符号 _a”。我搜索了类似的问题,但似乎在所有此类问题中,关键是他们没有使用“extern”关键字。我用它。我的程序出了什么问题?

最佳答案

当您编辑 header 时,通过在 Makefile 中放入如下所示的依赖项列表,您可以让 make 重建目标文件...

A.o: A.c A.h
B.o: B.c A.h B.h

...它告诉 make A.o 依赖于 A.c 和 A.h,B.o 依赖于 B.c A.h 和 B.h。然后,它将比较上次修改时间,如果任何依赖项比该对象新,它将重建它。

关于c - 使 : duplicate symbol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47010730/

相关文章:

javac junit 给出 "error: package org.junit does not exist"

linux - 从 makefile 执行复杂的 shell 命令

gnu-make - 在 gnu make 中使用 shell for 循环出现问题?

c++ - 用于调试打印的 MS 标志中的奇怪值

c - 关于 C 指针范围

获取 sin() 值时的 C 构建错误

c - 指针数组分配

c++ - .pro 文件更改后 Qt 不刷新 Makefile

c++ - 最小的 GNU Make 构建系统

makefile - GNU Make 递归扩展变量示例