プラグインを使用するようにプログラムを変換しようとしていますが、Makefile に問題があります。Makefile がディレクトリ plugins を調べて、そこで見つかったすべての .c ファイルを 2 つの異なる拡張子 .so と .o で、できれば別のフォルダーにコンパイルします。基本的にこれと同じです:
gcc -shared -lc -o testPugin.so testPugin.o
gcc -c -fpic testPugin.c
gcc Cprogram.c -ldl
ただし、不確定な数の .c ファイルの場合。
これまでのところ、プラグイン ディレクトリを調べてすべてのファイルを見つけることができましたが、上記の 2 番目の手順に従ってそれらをコンパイルし、.so ファイルと .o ファイルを出力することに行き詰まっています。これが私がこれまでに持っているものです:
TOP := $(dir $(lastword $(CURDIR)))
PLUGDIR = $(TOP)src/plugins
PLUGSRC = $(PLUGDIR)/*.c
OBJ = $(PLUGSRC:.c=.o)
SRCS = Cprogram.c
CFLAGS = -shared -lc
BINARY = testProg
$(BINARY): $(SRCS)
echo $(OBJ)
しかし、それだけで出力されます:
⇒ make
echo /Users/fragmachine/eclipse-workspace/Cprogram/src/plugins/*.o
/Users/fragmachine/eclipse-workspace/Cprogram/src/plugins/*.o
に変更OBJ = $(PLUGSRC:.c=.o)
すると、次のようOBJ = $(SRCS:.c=.o)
になります。
⇒ make
echo Cprogram.o
Cprogram.o
これは私が望むものの一種ですが、それは1つのファイルのみです。ある種のワイルドカード文字が欠けているに違いないと思いますが、 % と * を使用してみましたが、うまくいきませんでした。
私が何をしようとしているのかはっきりしない場合のために、奇妙な make 疑似コードをいくつか示します。
$(BINARY): $(SRCS)
gcc -shared -lc $(All plugin.c files) -o $(OBJ) #Output .o files for each plugin.c file
gcc -shared -lc $(All plugin.c files) -o $(OBJ2) #Output .so files for each plugin.c file
gcc -c -fpic $(All plugin.c files) # I'm not 100% sure what this does
gcc Cprogram.c -ldl # Compile the main program
私はまったく経験がありませんmake
。以前は本当に簡単なものしか作ったことがないので、どんな助けでも大歓迎です。