Linux---函数库和Makefile
- 函数库
- 动态库
- 静态库
- 例
- Linux项目自动化构建工具-make/Makefile
- 背景
- 实例代码
- 原理
- 项目清理
函数库
方法实现就是在库当中,库其实就是把源文件经过一定的翻译,然后打包,只给你提供一个文件计科,不用给你提供太多的源文件,也可以达到隐藏源文件的目的。
头文件提供声明,库文件提供方法的实现 + 你的代码 = 你的软件
函数库一般分为静态库和 动态库两种
Linxu:.so是动态库 .a静态库
windows:.dll动态库 .lib静态库
库有自己的命名规则:libname.so.XXX
只需要知道name就可以知道库的名字
gcc 默认生成的二进制程序,是动态链接的,这点可通过file命令验证
动态库
动态库也称共享库,是一种可供多个程序共享使用的可重定位目标文件。它包含一些预编译的可执行代码和可供程序调用的函数和变量。动态库通常在程序运行时被动态地加载和链接,而不是在编译时静态链接。这使得动态库可以减小程序的内存占用,并允许多个程序共享相同的库,从而提高程序的可重用性和可维护性。
动态库不能缺失,一旦对应的动态库缺失,影响的不止一个程序,可能导致很多程序都无法进行正常运行。
静态库
静态库是指编译链接时,把库文件的代码全部加入搭配可执行文件中,因此生成的文件比较大,但在运行时就不需要库文件了,其后缀名一般为.a
例
使用-static选项可以优先使用静态库
以静态链接的方式,程序的大小会变大,
如果我们没有动态库,只有静态库,而且gcc能找到,在不使用-static的情况下,gcc默认优先动态链接,-static的本质:改变优先级,只适配一次
不一定是纯的全部动态链接或者静态链接,混合的。
Linux项目自动化构建工具-make/Makefile
背景
- 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力
- 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
- makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编
- 译,极大的提高了软件开发的效率。
- make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
- make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建
实例代码
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world" << endl;
cout << "Hello world" << endl;
cout << "Hello world" << endl;
cout << "Hello world" << endl;
return 0;
}
makefile文件
Make:make.cpp
g++ -o Make make.cpp
clean:
rm Make
依赖关系(Dependency)是指一个目标文件所依赖的源文件或其他目标文件。当源文件或其他目标文件发生变化时,Make 工具会根据这些依赖关系来判断是否需要重新构建目标文件。
依赖方法(Dependency recipe)是指在 Makefile 中定义目标文件的构建规则。它告诉 Make 工具如何根据依赖关系来生成目标文件。依赖方法通常由一条或多条命令组成,用于执行编译、链接等操作,以最终生成目标文件。
-
定义依赖关系:
复制代码target: dependency1 dependency2 ...
这里
target
是要生成的目标文件,dependency1
、dependency2
等是target
所依赖的文件或目标。 -
定义依赖方法:
复制代码target: dependency1 dependency2 ... command1 command2 ...
在上述示例中,
command1
、command2
等是根据依赖关系执行的命令。当依赖关系中的任何一个文件发生变化时,Make 工具将自动执行对应的依赖方法,即执行与该目标相关的命令,以完成目标文件的构建。
通过定义正确的依赖关系和依赖方法,Make 工具能够自动判断源文件和目标文件之间的依赖关系,并根据需要执行对应的命令来生成最终的目标文件。
原理
当我们在终端中输入 make
命令时,Make 工具会执行以下操作:
- 读取 Makefile:Make 工具会查找当前目录下的名为
Makefile
- 解析 Makefile:Make 工具会解析 Makefile 文件,并分析其中的规则、依赖关系和命令。它会根据这些信息来确定何时需要重新构建目标文件。
- 检查依赖关系:Make 工具会检查每个目标文件所依赖的源文件或其他目标文件是否发生变化。它会比较文件的时间戳来确定是否需要重新构建目标文件。
- 执行命令:如果某个目标文件的依赖项发生了变化,或者该目标文件不存在,Make 工具将会执行与之相关的命令。这些命令通常包括编译、链接等操作,以生成新的目标文件。
- 生成目标文件:在执行命令后,Make 工具将生成最终的目标文件,并保存在指定的输出路径中。
项目清理
工程是需要被清理的
在 Makefile 中定义一个名为 “clean” 的目标,并添加相应的命令来完成项目清理。
当我们在终端中执行 make clean
命令时,Make 工具将会查找 Makefile 中的 “clean” 目标,并执行对应的命令。这样就可以清理项目中指定的文件或目录。
clean:
rm Make
清理规则通常不需要明确的依赖关系,而是作为一个独立的操作来执行。