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命令删除生成的目标文件、对象文件和库文件。

你可能感兴趣的:(makefile)