あなただけでは、目標とルールを作ることができます。
librfc7539.so: rfc7539.o chacha20poly1305.o poly1305.o chacha20.o
$(LINK.c) $(OUTPUT_OPTION) -shared $^ $(LOADLIBES) $(LDLIBS)
私は(あなたが更新できmake --print-data-base
からコマンドをコピーあなたの他のコマンドも同様です)。 LDFLAGS
に-fPIC
を追加する必要があります。
私はあなたのライブラリlibrfc7539.so
を-lrfc7539
を使ってリンクできるように電話しました。あなたが望むものだと思います。
私はそれが明示的にリンクする予定のオブジェクト・ファイルを指定することがベストプラクティスだと考えているが、いくつかは、すべてのソースファイルをコンパイルしてリンクする必要があることを前提としたい:
sources := $(wildcard *.c)
librfc7539.so: $(sources:.c=.o)
これが動作しませんコンパイルされたソースファイルの名前を別の名前のオブジェクトファイルに変更しない限り、あなたのためのものです。
私は、あなたのオブジェクトファイルが他のオブジェクトファイルに依存するのは奇妙なことに注意してください。そうではありませんが、ヘッダファイルに依存する必要があります。これは私がすべての日を探していた答えである
CFLAGS += -Wall -Wextra
CFLAGS += -fPIC
LDFLAGS += -fPIC
%.so: LDFLAGS += -shared
all: rfc7539_test librfc7539.so
librfc7539.so: rfc7539.o chacha20poly1305.o poly1305.o chacha20.o
$(LINK.c) $(OUTPUT_OPTION) $^ $(LOADLIBES) $(LDLIBS)
rfc7539_test: rfc7539.o chacha20poly1305.o poly1305.o chacha20.o
$(LINK.c) $(OUTPUT_OPTION) $^ $(LOADLIBES) $(LDLIBS)
# Default %.o:%.c rule works, except for these files with misnamed sources:
chacha20.o: chacha_merged.c
$(COMPILE.c) $(OUTPUT_OPTION) $<
poly1305.o: poly1305-donna.c
$(COMPILE.c) $(OUTPUT_OPTION) $<
# Specific flags for this source file
poly1305.o: CFLAGS += -DPOLY1305_16BIT
.PHONY: clean
clean:
@$(RM) *.o
@$(RM) rfc7539_test
.DELETE_ON_ERROR:
ありがとう:
はここ(GNU Makeを想定して)完全なMakefileのです。 – yrekik
@YoussefRekik喜んで私は助けることができます。あなたが役に立つと思ったら、[この回答を受け入れる](http://stackoverflow.com/help/accepted-answer)を自由に感じてください。 – dbush