0

我有一个makefile,它可以完成我想要的编译,但我也希望它可以创建一个库,而不仅仅是目标文件。

CC=gcc
CFLAGS=-g -Wall
DEPS = tree.h
OBJ = main.o tree.o 

%.o: %.c $(DEPS)
    $(CC) -c -o $@ $< $(CFLAGS)

tree: $(OBJ)
    $(CC) -o $@ $^ $(CFLAGS)

clean:
    rm -f *.o tree

现在我希望makefile是这样的:

gcc -Wall -g -c tree.c
ar -r libtree.a tree.o
gcc main.c -o main -ltree -L.
./main

我必须在现有的 makefile 中添加什么?

4

1 回答 1

2

这应该做你想要的:

%.o: %.c $(DEPS)
    $(CC) -c -o $@ $< $(CFLAGS)

lib%.a: %.o
    ar -r $@ $^

main: $(OBJ) $(DEPS:%.h=lib%.a)
    $(CC) -o $@ $^ $(CFLAGS) $(DEPS:%.h=-l%) -L.

请注意,这只适用于 GNU Make(特别是%in$(DEPS:%.h=lib%.a)是 GNU 特定的扩展)。

于 2012-12-09T22:57:06.993 回答