makefile 动态库编译
时间: 2024-10-18 20:01:07 浏览: 42
Makefile是一种在Unix/Linux系统中常用的自动化构建工具,它通过文本文件描述了如何从源代码编译、链接和打包生成目标二进制文件的过程。对于动态库的编译,Makefile通常会包含以下几个步骤:
1. **预处理** (Preprocessing): 使用cpp或gcc -E命令对.c或.cpp文件进行宏展开等处理,生成对应的.i文件。
2. **编译** (Compilation): 对预处理后的.i文件进行语法分析并生成汇编代码或对象文件 (.o)。例如:
```makefile
obj = $(patsubst %.c,%.o,$(wildcard *.c))
```
这里`$(wildcard *.c)`找到所有.c文件,`$(patsubst %.c,%.o,$(...))`将每个.c文件替换为.o文件名。
3. **链接** (Linking): 将多个对象文件连接成共享库(.so)。例如,使用g++进行链接:
```makefile
libname := mylib
shared_objs := $(obj:.o=.so)
$(shared_objs): % : %.o
g++ -shared -o $@ $^ -Wl,-soname=$(libname).so.1 -lpthread -ldl
```
4. **安装** (Installation): 如果需要,可以指定规则将生成的库复制到系统的默认目录,如`usr/lib`.
5. **清理** (Cleaning): 添加一个`clean`规则,用于清除编译过程中产生的临时文件和目标文件,例如:
```makefile
clean:
rm -f *.o *.so $(libname).*
```
阅读全文