如何在Makefile中创建对.o文件的引用

时间:2015-10-26 03:28:02

标签: c gcc makefile

我获得了两个带有相应.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文件没有用我的代码编译。

2 个答案:

答案 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 $@