makefile之生成动态库和静态库的例子

makefile之生成动态库和静态库的例子

Makefile示例,生成静态库(.a文件)和动态库(.so文件)的例子

  
# 定义编译器和编译选项  
CC = gcc  
CFLAGS = -Wall -Werror  
  
# 定义源文件列表  
SRC = file1.c \  
      file2.c \  
      file3.c  
  
# 定义对象文件列表  
OBJ = $(SRC:.c=.o)  
  
# 定义静态库名称  
LIB_STATIC = libstatic.a  
  
# 定义动态库名称  
LIB_SHARED = libshared.so  
  
# 默认目标,生成静态库和动态库  
all: $(LIB_STATIC) $(LIB_SHARED)  
  
# 生成静态库  
$(LIB_STATIC): $(OBJ)  
 $(AR) rcs $(LIB_STATIC) $(OBJ)  
  
# 生成动态库  
$(LIB_SHARED): $(OBJ)  
 $(CC) -shared -o $(LIB_SHARED) $(OBJ)  
  
# 将每个源文件编译成对象文件  
$(OBJ): $(SRC)  
 $(CC) $(CFLAGS) -c $(@:.o=.c)  
  
# 清除生成的目标文件、对象文件和库文件  
clean:  
 rm -f $(OBJ) $(LIB_STATIC) $(LIB_SHARED)
CC = gcc - 定义编译器为gcc。

CFLAGS = -Wall -Werror - 定义编译选项为-Wall(开启所有警告)和-Werror(将所有警告视为错误)。

SRC = file1.c file2.c file3.c - 定义源文件列表,包含file1.c、file2.c和file3.c。

OBJ = $(SRC:.c=.o) - 通过替换规则将源文件列表中的扩展名.c替换为扩展名.o,生成对象文件列表。

LIB_STATIC = libstatic.a - 定义静态库的名称为libstatic.a。

LIB_SHARED = libshared.so - 定义动态库的名称为libshared.so。

all: $(LIB_STATIC) $(LIB_SHARED) - 定义默认目标为依赖于静态库和动态库的目标文件。

$(LIB_STATIC): $(OBJ) - 定义静态库的依赖关系,它依赖于对象文件。

$(LIB_SHARED): $(OBJ) - 定义动态库的依赖关系,它依赖于对象文件。

$(OBJ): $(SRC) - 通过规则将每个源文件编译成对应的对象文件。

$(CC) $(CFLAGS) -c $(@:.o=.c) - 使用指定的编译器和编译选项编译源文件,生成对应的对象文件。

clean: - 定义一个清除目标,用于清除生成的目标文件、对象文件和库文件。

rm -f $(OBJ) $(LIB_STATIC) $(LIB_SHARED) - 使用rm命令删除生成的目标文件、对象文件和库文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

付宇利

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值