使用make
5.11 库的使用
代码的复用是计算机程序设计语言中的一个重要的概念。可以把编译好的目标文件模块统一放到一个库中,使得程序员可以在不同的程序中共享这些代码。
在Linux操作系统下,最后连接生成可执行文件时,如果链接的是一般的.o文件,则整个文件的内容都会被装入可执行文件中;如果链接的是库,则只是从库中找到程序中用到的变量和函数,将它们装入可执行文件中,那些在库中没有被程序所引用的变量和函数则不会被链接到最终的可执行文件。
所以,库可以节省大量的开发时间。在写较大程序时,最好把程序模块放在库中。
5.11.1 创建库和维护库
库中所有文件都叫作库的成员,可以时用以下格式来表示库的成员:
库名(成员名)
如:
mylib.a(mytest5_1.o)
用来表示库mylib.a中的一个文件mytest5_1.o。 #.a为库常用的扩展名
表示库成员的另一个格式:
库名((entry))
使用下面格式来说明库和成员的依赖关系:
库名:库名(成员名) 库名(成员名) ...
另一种格式说明依赖关系:
库名 .LIBRARY:成员名1 成员名2 ...
示例:维护一个名为mylib的库,makefile文件格式如下:
mylib:mylib(test5_1.o)
gcc -c test5_1.c
ar -ruv mylib test5_1.o
rm test5_1.o
mylib:mylib(test2.o)
gcc -c test2.c
ar -ruv mylib test2.o
rm test2.o
ar 命令的作用是从.o结尾的目标文件更新库,格式如下:
ar -ruv 库名 目标文件名
上面两段代码很相似,可以利用动态宏合并不同的文件,代码如下:
随机推荐
- vtigercrm特色功能介绍
1.邮件跟踪 市场营销活动中,我们给客户发出了大量的电子邮件,这些邮件被客户阅读的情况你了解吗?vtiger CRM中独特的邮件跟踪功能,可以让你了解到邮件是否被客户浏览.浏览的次数和时间.通过客户的 ...
- Activity简介
声明周期 4种状态 running / paused / stopped / killed 声明周期 activity启动 --->onCreate() -->onStart()---& ...
- QLabel播放gif
mv = new QMovie(strIconPath + "justake.gif"); mv->setScaledSize(QSize(,)); ui->label ...
- 项目中git分支管理策略
- 解决Maven环境变量配置后,’mvn’不是内部或外部命令的问题
1. 前往https://maven.apache.org/download.cgi下载的Maven程序,解压放在一个路径下 2.新建环境变量MAVEN_HOME,赋值:解压路径如: D:\env\ ...
- Cmake 学习笔记
编写CMakeLists.txt #在当前目录新建一个build目录,然后cd build:cmake .. #这样的好处是,可以将cmake生成的内容,和源码文件分离 #设置编译结果发布路径 ...
- SQLServer之集合
集合的定义 集合是由一个或多个元素构成的整体,在SQLServer中的表就代表着事实集合,而其中的查询就是在集合的基础上生成的结果集.SQL Server的集合包括交集(INTERSECT).并集(U ...
- dotnet中Stream、string及byte[]的相关操作
string与byte[](UTF-8) //string to byte[] string str = "abc中文"; //0x61 0x62 0x63 0xE4 0xB8 0 ...
- .NET Core微服务之基于Steeltoe使用Zipkin实现分布式追踪
Tip: 此篇已加入.NET Core微服务基础系列文章索引 => Steeltoe目录快速导航: 1. 基于Steeltoe使用Spring Cloud Eureka 2. 基于Steelt ...
- 使用 ASP.NET Core MVC 创建 Web API(二)
使用 ASP.NET Core MVC 创建 Web API 使用 ASP.NET Core MVC 创建 Web API(一) 六.添加数据库上下文 数据库上下文是使用Entity Framewor ...