Makefile 编译动态链接库

以基于tensorflow模型的命名实体为例:

项目ner_cpp路径下有多个文件夹,./inlude   ./src  ./test  等等

如果想要把./src路径下的所有文件生成一个 xxx.so 或xxx.a的链接库,那么在src的目录下编写一个CMakeLists.txt文件

aux_source_directory(. DIR_SRCS)
# 生成链接库
add_library(NER SHARED ${DIR_SRCS})

 上面的为动态链接库,最终生成libNER.so

  aux_source_directory(. DIR_SRCS) 将当前目录(src文件夹下)所有源文件的文件名赋值给变量 DIR_SRCS 

 CMakeLists.txt中的add_library(NER SHARED ${DIR_SRCS})该指令是将DIR_SRCS 中的源文件生成链接文件,然后添加到工程中去。其中,NER表示库文件的名字,最终生成libNER.so

那么静态链接如下,生成libNER.a

aux_source_directory(. DIR_SRCS)
# 生成链接库
add_library (NER ${DIR_SRCS})

 

项目ner_cpp下的CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.8)
project(sample)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -W")

link_directories(
  /home/tensorflow-r1.14/bazel-bin/tensorflow
  /usr/local/lib
  /usr/local/lib64
  /home/n
Makefile在C语言中主要用于自动化构建过程,特别是当项目较大、包含多个源文件和目标文件时,它可以帮助管理编译步骤。要编译动态链接库(通常称为.so文件),你需要在Makefile中设置以下几个关键部分: 1. **变量设定**: - `CC` 或 `CXX`: 编译器(例如 gcc 或 g++)。 - `AR` 和 `RANLIB`: 索引程序(用于创建静态库)和归档程序(用于压缩库)。 2. **规则定义**: - `SRCS` 变量列出所有需要编译的源文件。 - `OBJS` 变量基于`SRCS`生成的对应目标文件名(通常是.c或.cpp扩展名转成.o)。 - 添加一个新的规则,如 `libfoo.so: $(OBJS)`, 表示当`$(OBJS)`都存在时,将生成`libfoo.so`。 3. **编译规则**: - 使用 `$(CC)` 和 `-shared` 选项编译为动态库,比如 `%.o: %.c`可以写成 `$(CC) -c -fPIC $< -o $@`. - 使用 `ar` 命令打包目标文件为静态库:`$(AR) rcs libfoo.a $(OBJS)`. - 如果需要运行链接(如有依赖的库),则添加 `$(CC) -shared -o libfoo.so $(OBJS) -Lpath/to/library -ldependency`. 4. **安装规则**: - 安装前确保清理旧版本(如果有):`clean:; rm -rf libfoo*` - 安装时将库移动到指定位置,如 `/usr/local/lib` 或 `install: clean; cp libfoo.so /your/install/path`. 例子: ```makefile CC = gcc AR = ar SRCS = source1.c source2.c source3.c OBJS = $(SRCS:.c=.o) all: libfoo.so %.o: %.c $(CC) -c -Wall -std=c99 -fPIC $< -o $@ libfoo.so: $(OBJS) $(CC) -shared -o libfoo.so $(OBJS) -lm clean: rm -rf *.o libfoo.* install: clean cp libfoo.so /usr/local/lib/ ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值