Я пытаюсь преобразовать мой program для использования плагинов, и у меня возникают проблемы с Makefile. Я хочу, чтобы Makefile выглядел в плагинах каталога, компилировал все файлы .c, найденные там, с двумя разными расширениями .so и .o, желательно в отдельную папку. В основном то же самое:Создайте несколько файлов .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
Что-то, что я хочу но это только для одного файла. Я думаю, что мне не хватает какого-либо подстановочного характера, но я пробовал использовать% и * без везения.
В случае, если это не ясно, что я пытаюсь сделать, вот какой-то странный код делают псевдо:
$(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