当前位置:网站首页>Makefile变量及动态库静态库
Makefile变量及动态库静态库
2022-07-24 09:06:00 【渣渣馬】
一、Makefile变量
1. Makefile的预定义变量
| 变量名 | 含义 |
|---|---|
| AR | 函数库打包程序,可创建静态库.a文档。默认是ar |
| AS | 汇编程序,默认是as |
| CC | C编译程序,默认gcc |
| CXX | C++编译程序,默认g++ |
| CPP | C程序的预处理器,默认是$(CC) -E |
| RM | 删除命令,默认是rm -f |
| ARFLAGS | 执行AR命令的命令行参数,默认rv |
| ASFLAGS | 汇编器AS的命令行参数(明确指定.s或.S文件时) |
| CFLAGS | 执行CC编译器的命令行参数(编译.c源文件的选项) |
| CXXFLAGS | 执行g++编译器的命令行参数(编译.cpp源文件的选项) |
2. Makefile的自动化变量
| 变量名 | 含义 | 备注 |
|---|---|---|
| @ (文件名) | 代表其所在规则的目标的完整名称 | |
| % (文件名) | 代表其所在规则的静态库文件的一个成员名 | |
| < (文件名) | 代表其所在规则的依赖列表的第一个完整名称 | |
| * (文件名) | 在模式规则和静态模式规则中,代表茎 | 茎时目标模式中”%”说代表的部分。当文件名存在目录时,茎也可包含目录 |
| ? (文件列表) | 待变所有时间戳比目标文件新的依赖文件列表,用空格分开 | |
| ^ (文件列表) | 代表其所在规则的依赖列表 | 同一文件不可重复 |
| + (文件列表) | 代表其所在规则的依赖列表 | 同一文件可重复,主要用在程序链接时,库的交叉引用场所 |
3. Makefile的自动化变量的变种
| 变量名 | 含义 | 备注 |
|---|---|---|
| @D | 代表目标文件的目录部分(去掉目录部分的最后一个斜杠) | 如果 $ @ 是dir/foo.o,那么$(@D)的值为dir;如果 [email protected]存在斜杠,其值为当前目录(.);注意它与函数dir的区别 |
| @F | 目标文件的完整文件名中除目录以外的部分(实际文件名) | 如果 $ @是dir/foo.o,那么 $ (@F)就是foo.o; $ (@F)等价于函数$(notdir [email protected]) |
| *D | 代表目标茎中的目录部分 | |
| *F | 代表目标茎中的文件名部分 | |
| %D | 当archive(member)形式静态库为目标时,表库文件成员member名中的目录部分 | 仅对archive(member)形式的规则目标有效 |
| %F | 当archive(member)形式静态库为目标时,表库文件成员member名中的文件名部分 | 仅对archive(member)形式的规则目标有效 |
| <D | 代表规则中第一个依赖文件的目录部分 | |
| <F | 代表规则中第一个依赖文件的文件名部分 | |
| ^D | 代表所有依赖文件的目录部分 | 同一文件不可重复 |
| ^F | 代表所有依赖文件的文件名部分 | 同一文件不可重复 |
| +D | 代表所有依赖文件的目录部分 | 同一文件可重复 |
| +F | 代表所有依赖文件的文件名部分 | 同一文件可重复 |
| ?D | 代表被更新的依赖文件的目录部分 | |
| ?F | 代表被更新的依赖文件的文件名部分 |
4. Makefile的运行和使用
# 执行指定的Makefile Almake是makefile的名称
$ make -f ALmake
$ make --file Almake
$ make --makefile Almake
$ make TARGET #指定终极目标
#强制重建所有规则中的目标
$ make -B
$ make -always-make
#指定makefile的所在路径
$ make -C dir/
$ make --directory=dir/
# GNU-autotools工具(自动化makefile)
# GNU软件安装的三部曲
$ ./configure
$ make
$ make install
二、动态库和静态库
1. 静态库和动态库的了解
- 静态库:Linux以.a为后缀名的文件(win的lib文件)
静态库在gcc的链接阶段整合如可执行程序中。即使库被删除了,程序依然可以成功运行。但体积大.
程序装入时拷贝静态库装入程序的,所以体积较大。 - 动态库:Linux以.so为后缀的文件(win的dll文件)
动态库不专属于任何一个程序,任何程序都可以共用这个库,在程序运行时,才链接库。体积小。 - Linux的命名系统中动态库的规则
libname.so.x.y.z
lib:固定代表库 name:库名 so:固定后缀 x:主版本号 y:次版本号 z:发行版本号
主版本在版本升级时是不兼容(主版本号区别)
次版本更新软件,保留原有的程序,添加功能(版本号向下兼容)
发行版本性能更改,程序优化;(相互兼容)
2. 静态库的创建和使用(ar命令)
# ar的常用参数
$ ar -ctr libtest.a *.o #将当前目录下的所有.o文件都打包成静态库libtest.a
#ar 的参数
# -r 将文件插入库文件中,如果已存在就替换;
# -t 查看所有打包的.o文件
# -c 表示创建,create
$ gcc main.c libtest.a -o main #使用静态库
3. 动态库的创建和使用
$ gcc -fPIC -shared *.c -o libtest.so #创建动态库
# -fPIC 表示生成独立代码 PIC告诉编译器产生与位置无关代码,即内存不固定。
# -shared 表示生成共享的动态库
$ gcc main.c ./libtest.so -o main -I ./inc #链接动态库生成执行文件main,但main执行的时候动态库必须存在。
#动态库默认实在系统lib中找,可以将生成的动态库考培带系统lib中;也可添加$LD_LIBRARY_PATH 的环境变量到本目录下也可。
# 添加环境变量export LD_LIBRARY_PATH=/home/gec/Linux/ku:$LD_LIBRARY_PATH
# /home/gec/lib:库文件路径(路径可根据自身需求指定);
# 注意:封装动态库时候的函数对应头文件;动态库要存在;动态库的环境
边栏推荐
- Usage of volatile keyword in C language
- Houdini 官方HDA SideFX Labs 安装
- SQL problem summary
- Tiktok 16 popular categories, tiktok popular products to see which one you are suitable for?
- UE5影视动画渲染MRQ分层学习笔记
- 使用Go语言开发eBPF程序
- C language practice questions + Answers:
- 【翻译】使用gRPC和REST的微服务架构中的集成挑战
- On the relationship between C language function name and function pointer
- Office fallback version, from 2021 to 2019
猜你喜欢

FreeRTOS - use of software timer

First acquaintance with JVM
![[example of URDF exercise based on ROS] use of four wheeled robot and camera](/img/c5/babce5c6921b9cb54f018dc83a3b87.jpg)
[example of URDF exercise based on ROS] use of four wheeled robot and camera

Android system security - 5.3-apk V2 signature introduction

(5) Cloud integrated gateway gateway +swagger documentation tool

office回退版本,从2021到2019

Six pictures show you why TCP shakes three times?

Android系统安全 — 5.2-APK V1签名介绍
![[FFH] websocket practice of real-time chat room](/img/9a/ffd31fe8783804d40edeca515cc96c.png)
[FFH] websocket practice of real-time chat room

使用Go语言开发eBPF程序
随机推荐
JS built-in method
The difference between & &, | and |
C# 简述里氏替换原则的应用
How to open the port number of the server, and the corresponding port of common network services
Some mistakes that Xiaobai often makes (update from time to time, and promise not to make them again next time)
Ue5 film and television animation rendering MRQ layered learning notes
Houdini 官方HDA SideFX Labs 安装
Read write lock, shared lock, exclusive lock
超全总结:Go语言如何操作文件
Shell script backup mongodb database
VGA character display based on FPGA
How to import CAD files into the map new earth and accurately stack them with the image terrain tilt model
Rocky基础-Shell脚本基础知识
Unity解决Package Manager“You seem to be offline”
On the relationship between C language function name and function pointer
C语言练习题目+答案:
Nuxt 路由切换后 asyncData 跨域报错
First acquaintance with JVM
pip3 带源安装大全
One year after I came to Ali, I ushered in my first job change