“由于未完成链接而未使用链接器输入文件”是什么意思?

时间:2019-01-20 16:23:37

标签: makefile

这很奇怪。尽管一切都会按预期进行,但编译器会发出此警告。

这是引发警告的makefile:

TARGET = $(notdir $(shell pwd))

LIBS = -lm -lev3dev-c
D_BIN = Build-Assets

ifeq ($(OS),Windows_NT)
LIBS := $(LIBS) -lws2_32
D_BIN := $(D_BIN)/mingw
endif

D_H = ../../source/ev3
CFLAGS = $(addprefix -I, $(D_H)) -O2 -std=gnu99 -W -Wall -Wno-comment

ifeq ($(OS),Windows_NT)
CC = gcc
else
CC = arm-linux-gnueabi-gcc
endif

ifeq ($(OS),Windows_NT)
E_BIN = .exe
else
E_BIN =
endif

F_BIN = $(TARGET)$(E_BIN)

OBJECTS = $(addprefix $(D_BIN)/, $(patsubst %.c, %.o, $(wildcard MotorControl/*.c)))

.PHONY: default all clean

default: $(F_BIN)
all: default

$(OBJECTS): $(D_BIN)/%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@

.PRECIOUS: $(F_BIN) $(OBJECTS)

$(F_BIN): $(OBJECTS)
    $(CC) $(OBJECTS) -c -Wall $(LIBS) -o $@

clean:
    -rm -f $(D_BIN)/*.o
    -rm -f $(F_BIN)

我应该补充一点,就是我不知道自己在做什么...我只是从C开始,那些该死的makefile非常压倒一切。

1 个答案:

答案 0 :(得分:0)

-c option跳过最终链接并生成可重定位的目标文件:

$(F_BIN): $(OBJECTS)
    $(CC) $(OBJECTS) -c -Wall $(LIBS) -o $@

这就是为什么在此阶段不使用链接器输入文件。您应该可以删除-c选项,该命令将生成可执行文件。