如何扩展makefile来组成库?

时间:2012-12-09 21:28:14

标签: c compilation makefile static-libraries

我有一个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中吗?

1 个答案:

答案 0 :(得分: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(特别是%中的$(DEPS:%.h=lib%.a)是特定于GNU的扩展名。)