首页 > 解决方案 > 在makefile中使用ar(1)命令时将库提取到不同的路径

问题描述

我正在尝试用库编译一些 c 代码。而且我需要在使用它之前为不同的路径创建库。我的makefile是这样的:

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

a 是我的主要 c 文件。如您所见,b、c、d 和 e 是图书馆的。我需要将它们存储在它们所属的确切位置。像头文件必须在“include”文件中,对象在“objs”等中。最重要的是我的库(.a)在编译后必须在“lib”文件中。我的主要问题是如何使用“ar”命令编译我的库并将其存储到“lib”文件下。当然,它应该从“objs”文件中获取对象文件。我的文件顺序如下:在此处输入图像描述

编辑:以这种方式制作,现在可以使用了。

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 $<

标签: cgccmakefile

解决方案


推荐阅读