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