我在嘗試將program轉換爲使用插件,並且在Makefile中遇到了一些問題。我希望Makefile在目錄插件中查找,將所有在那裏找到的帶有兩個不同擴展名.so和.o的.c文件編譯成一個單獨的文件夾。基本上與此相同:從多個.c文件生成多個.so和.o文件
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
這是那種我想要的但它只適用於一個文件。我想我一定會錯過某種通配符,但是我嘗試過使用%和*而沒有運氣。
在情況下,它不清楚是什麼,我試圖做的,這裏是一些奇怪的化妝僞代碼:
$(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
可言了豐富的經驗。我只做過非常簡單的,所以任何幫助將不勝感激。
非常感謝您的支持!我一整天都在瞎搞,沒有成功。我開始創建一個bash腳本,所以我至少可以創建一些東西......我應該能夠從這裏弄清楚它。再次感謝 :) – facetoe 2013-03-02 09:38:38