私はこの単純な構造を持っています:
.
test.c
plugins/a.c
plugins/b.c
plugins/c.c
そして、これをbashスクリプトでコンパイルしています:
gcc -o test test.c -std=gnu99 -ldl -Wl,--export-dynamic
gcc -c plugins/a.c -o plugins/a.o -pedantic -g -Wall -std=c99 -fpic -I.
gcc plugins/a.o -o plugins/a.so -shared
...same for b and c...
とにかく、それを Makefile に移植したい。ここに私が持っているものがあります:
CC = gcc
PLUGIN_DIR = plugins
PLUGINS_C = $(wildcard $(PLUGIN_DIR)/*.c)
PLUGINS_O = $(patsubst %.c,%.o, $(PLUGINS_C))
new: clean all
all: test plugins
test: test.o
$(CC) -o $@ $^ -std=gnu99 -ldl -Wl,--export-dynamic
plugins:
???
$(PLUGIN_DIR)/*.c:
$(CC) -c $(PLUGIN_DIR)/$@ $^ -pedantic -g -Wall -std=c99 -fpic -I.
$(PLUGIN_DIR)/*.o:
$(CC) $@ $^ -shared
clean:
rm -rf test *.o *.a plugins/*.o plugins/*.so
しかし、ルールが空であるため、これは機能しません。フォルダーplugins
内のすべてのプラグインをコンパイルするには、そこに何を書き込む必要があるかを実際に見つけることができません。また、とplugins
をめちゃくちゃにしたかどうかもわかりません。$@
$^