1.库+makefile
库
功能:移植性,封装性,保护源码

分类: 静态库 .a
动态库 .so
一、
静态库:libXXX.a
1、 准备功能函数的.c文件
将所有功能函数的.c文件编译为.o文件
2、 打包生成静态库: ar -rc libxxx.a add.o...
libStatic.a 库名要掐头去尾:Static
3、 利用静态库编译程序
gcc main.c -l库名 -L库的路径
-l:(小写的L)指明用到的库文件
-L:库文件所在的的路径
特点:以空间换取时间
二、
libdong.so 动态库
1、先准备功能函数的 .c
2、将.c 转化为 .o

3、打包生成动态库 libxxx.so
gcc -fpic -shared xxx.o yyy.o -o libxxx.so
或 gcc -shared -fpic *.o -o libdong.so
4、
第一步:将动态库拷贝到/usr/lib
第二步:编译应用程序 gcc main.c -lxxx
-l:(小写的L)指明用到的库文件
sudo cp libdong.so /usr/lib
验证:gcc mian.c -o main -ldong
特点:./main 以时间换空间
三、
makefile
make
1、作用
相当于脚本编程语言,本质是实现自动化编译,需要makefile或者Makefile文件支持
2、安装
sudo apt-get install make
3、使用
makefile/Makefile是一个文件,可以用vim或者gedit编辑
格式:
目标:依赖
(Tab)命令
整体思想:目标和依赖的关系,命令就是来定义由依赖如何生成目标的
注意:命令之前要有tab键不允许有空格
注释: 以#开头
变量
定义: 变量名=XXX
使用: $(变量名)
特殊变量:
$@ 目标文件
$^ 所有的依赖文件
如果目标文件中有多个重复的,那么这个变量会除去重复的依赖文件,只保留一份。

$< 所有依赖合集中的第一个依赖文件
如果依赖目标是以模式(%)定义的,那么$<将是复合模式的一系列的文件集合,注意,是一个一个取出来的,和目标一对一执行命令。
%表示通配符

伪目标:没有依赖的目标
格式:
目标:
(Tab)命令
举例:
clean:
rm *.o main
运行:
终端输入:make
make默认生成文件中的第一个目标
要想从生成其他目标:make 目标
备注:
多个makefile
make的时候是需要有makefile文件来支持
直接make:会找 Makefile 或 makefile(先找makefile,没有就找Makefile)
想要指定:make -f makefile或者make -f Makefile