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.

これはGNUMakeでのみ機能することに注意してください(特に、%in$(DEPS:%.h=lib%.a)はGNU固有の拡張機能です)。

于 2012-12-09T22:57:06.993 に答える