我获得了两个带有相应.h文件的.o文件用于作业,但我不知道如何让编译器使用.o文件。这是我目前正在使用的Makefile:
TARGET = prog
LIBS = -lm
CC = gcc
CFLAGS = -g -Wall
.PHONY: default all clean
default: $(TARGET)
all: default
OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c))
HEADERS = $(wildcard *.h)
%.o: %.c $(HEADERS)
$(CC) $(CFLAGS) -c $< -o $@
.PRECIOUS: $(TARGET) $(OBJECTS)
$(TARGET): $(OBJECTS)
$(CC) $(OBJECTS) -Wall $(LIBS) -o $@
clean:
-rm -f *.o
-rm -f $(TARGET)
我相信我需要在最后添加file1.o和file2.o,但我不确定这是否正确。我在适当的时候在C源文件中有.h文件,所以我能想到编译错误的唯一原因是.o文件没有用我的代码编译。
答案 0 :(得分:1)
编译器不使用.o文件。链接器确实。
您的链接步骤必须
M
(很可能缺少其他一些链接器标志,但这是你问题的症结所在)
此外,您可能不希望干净步骤删除所有.o文件,因为您至少提供了两个。
答案 1 :(得分:1)
为提供的.o&#39;添加定义:
PREBUILT_O = fludger.o ramble.o plexor.o
将目标规则更改为:
$(TARGET): $(OBJECTS) $(PREBUILT_O)
$(CC) $(OBJECTS) $(PREBUILT_O) $(LIBS) -o $@