我有一个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中吗?
答案 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的扩展名。)