我正在尝试将我的程序转换为使用插件,但我在使用 Makefile 时遇到了一些问题。我希望 Makefile 在目录插件中查找,编译在那里找到的所有具有两个不同扩展名 .so 和 .o 的 .c 文件,最好将其编译到一个单独的文件夹中。基本上和这个一样:
gcc -shared -lc -o testPugin.so testPugin.o
gcc -c -fpic testPugin.c
gcc Cprogram.c -ldl
但是对于不确定数量的 .c 文件。
到目前为止,我已经设法查看插件目录并找到所有文件,但我坚持按照上面的第二步编译它们并输出 .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
这是我想要的,但它只适用于一个文件。我想我一定是缺少某种通配符,但我尝试使用 % 和 * 却没有运气。
如果不清楚我要做什么,这里有一些奇怪的 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
。我以前只做过非常简单的,所以任何帮助都将不胜感激。