извлечение библиотеки по другому пути при использовании команды ar (1) в make-файле - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь скомпилировать некоторые c коды с библиотекой. И мне нужно создать библиотеку по другому пути, прежде чем использовать его. Мой make-файл выглядит так:

CFLAGS = -O3

all: libexm.a derle 

OBJS = b.o c.o d.o e.o

libexm.a: $(OBJS)
    ar ru libexm.a $(OBJS)
    ranlib libexm.a

clean:
    rm -f core *.o libexm.a

.SUFFIXES: .c .o
.c.o:
    $(CC) $(CFLAGS) -I ./include/ -c ./src/$*.c

derle:
    gcc -g -I ./include/ -o ./bin/test ./src/a.c ./lib/libexm.a -lm

- это мой главный c файл. b, c, d и e - библиотеки, как вы можете видеть. Мне нужно хранить их именно там, где они принадлежат. Подобно тому, как заголовки должны быть в файле «include», объекты в «ob js» et c. , И самое главное, моя библиотека (.a) должна быть в файле "lib" после компиляции. Моя главная проблема заключается в том, как я могу скомпилировать свою библиотеку с помощью команды "ar" и сохранить ее в файле "lib". И, конечно, он должен брать файлы объектов из файла "ob js". Мой порядок файлов такой: enter image description here

РЕДАКТИРОВАТЬ: сделал это таким образом, и теперь это работает.

INC = ./include/
BIN = ./bin/
SRC = ./src/
LIB = ./lib/
OBJS = ./objs/
libOBJS = b.o c.o d.o e.o

hepsi: $(libOBJS) libexm.a
    gcc -g -I $(INC) -o $(BIN)a $(SRC)a.c $(LIB)libexm.a -lm

libexm.a: $(addprefix $(OBJS), $(libOBJS))
    ar rcs $(LIB)libexm.a $+
    ranlib $(LIB)libexm.a

$(libOBJS): %.o: $(SRC)%.c
    gcc -o $(OBJS)$@ -I $(INC) -c $<
...