Program_name:链接器输入文件未使用,因为链接未完成

时间:2016-01-30 15:58:31

标签: c makefile

我有6个程序:HOSpital.c,GenPazienti.c,Triage.c,Paziente.c,Prestazione.c和Reparto.c。

他们中没有人包括任何其他人。

我该怎么做makefile?

我尝试过:

all: HOSpital GenPazienti Paziente Prestazione Reparto Triage

HOSpital: HOSpital.o
    gcc -o HOSpital HOSpital.c

HOSpital.o: HOSpital.c 
    gcc -c HOSpital HOSpital.c

GenPazienti: GenPazienti.o
    gcc -o GenPazienti GenPazienti.c

GenPazienti.o: GenPazienti.c 
    gcc -c GenPazienti GenPazienti.c

Paziente: Paziente.o
    gcc -o Paziente Paziente.c

Paziente.o: Paziente.c
    gcc -c Paziente Paziente.c

Prestazione: Prestazione.o
    gcc -o Prestazione Pretazione.c

Prestazione.o: Prestazione.c 
    gcc -c Prestazione Prestazione.c

Reparto: Reparto.o
    gcc -o Reparto Reparto.c

Reparto.o: Reparto.c
    gcc -c Reparto Reparto.c

Triage: Triage.o
    gcc -o Triage Triage.c

Triage.o: Triage.c
    gcc -c Triage Triage.c

clean:
    rm -f *.o

但是,如果我改变了一些东西并输入“make”,我会得到错误: “Program_name:链接器输入文件未使用,因为链接未完成”

1 个答案:

答案 0 :(得分:0)

让我们举一个例子:

gcc -c HOSpital HOSpital.c

这将尝试将HOSpital用作输入文件。

使用正确的选项命名输出文件,-o正确命名。喜欢

gcc -c -o HOSpital.o HOSpital.c

或者根本不指定输出文件名,编译器将使用输入源文件并将.c后缀更改为.o。喜欢

gcc -c HOSpital.c

这是同样的问题。

最后并不重要,使用规则以便构建目标文件,但实际上不使用目标文件:

gcc -o HOSpital HOSpital.c

在这里,您可以直接使用源文件来创建程序。我认为你打算使用

gcc -o HOSpital.o HOSpital.o

和上一个问题一样,你犯了这个错误。

最后一些一般提示。

首先,在启用更多警告的情况下构建。从长远来看,它将帮助您找到代码中的错误,并帮助找出可能存在未定义行为的地方。我建议至少添加-Wall -Wextra -pedantic

然后您不需要在makefile中明确列出所有目标文件及其规则。 make程序已经知道如何制作例如目标文件通过implicit rules

最后一点意味着您可以将makefile缩短为类似

的内容
CFLAGS = -Wall -Wextra -pedantic -pipe
LD = gcc
LDFLAGS = -pipe

HOSpital: HOSpital.o
    $(LD) $(LDFLAGS) -o $@ $^

GenPazienti: GenPazienti.o
    $(LD) $(LDFLAGS) -o $@ $^

Paziente: Paziente.o
    $(LD) $(LDFLAGS) -o $@ $^

Prestazione: Prestazione.o
    $(LD) $(LDFLAGS) -o $@ $^

Reparto: Reparto.o
    $(LD) $(LDFLAGS) -o $@ $^

Triage: Triage.o
    $(LD) $(LDFLAGS) -o $@ $^

clean:
    -rm -f *.o

变量$@是规则的目标,变量$^是所有先决条件。例如,

HOSpital: HOSpital.o

变量$@HOSpital$^HOSpital.o