1.动静态库和动静态链接(操作)
-
静态库是指编译链接时,
把库⽂件的代码全部加⼊到可执⾏⽂件中
,因此⽣成的⽂件⽐较⼤
,但在运⾏时也就不再需要库⽂件了。其后缀名⼀般为“.a”
-
动态库与之相反,在编译链接时并
没有把库⽂件的代码加⼊到可执⾏⽂件中
,⽽是在程序执⾏时由运⾏时链接⽂件加载库,这样可以节省系统的开销。动态库⼀般后缀名为“.so”
静态链接操作:gcc code.o -o mycode -static
动态链接操作:gcc code.o -o mycode
2.自动化构建make/makefile
1.初识makefile
- makefile带来的好处就是⸺⸺
“⾃动化编译”
,⼀旦写好,只需要⼀个make命令,整个⼯程完全
⾃动编译,极⼤的提⾼了软件开发的效率。 - make是⼀个命令⼯具,是⼀个解释makefile中指令的命令⼯具,⼀般来说,⼤多数的IDE都有这
个命令,⽐如:Delphi的make,VisualC++的nmake,Linux下GNU的make。可⻅,makefile
都成为了⼀种在⼯程⽅⾯的编译⽅法。 - make是⼀条命令,makefile是⼀个⽂件,两个搭配使⽤,完成项⽬⾃动化构建。
浅浅尝试一下:
1.
先创建一个code.c并用vim进行编写,再新建一个makefile
用vim打开makefile,并写入以上内容,
:
前为要生成的可执行程序的名字,:
后为源文件(第一行为依赖关系
)- gcc code.c -o code (第二行为
依赖方式
)
make指令完成编译。
运行也成功
2.具体语法
1.清理代码文件
如果代码文件我不想要了,那怎么清理呢?
先vim打开makefile,写入红框的内容
- 第一行表示
clean不依赖于任何文件
- 第二行为依赖方式
执行make clean,发现code(可执行文件)已经被删除
2.依赖关系的推导
test.c存在,推导结束
3.完整的makefile语法
1.类似宏替换的操作
之前我们在makefile里都是直接写文件名的,这里使用 类似宏替换
的方式替换命令和文件,记住,在使用替换时要加上$()
2.多文件统一编译为可执行文件
假如我们的文件非常多,那么上述类似宏替换的方法就不行了,举例:
模拟100个文件的情况
我们来依次解释:
这句话表示,SRC拿到了当前目录里 所有以.c结尾的文件
这行表示OBJ是由SRC中 所有.c变为.o得来的
这里的^
是指依赖关系中:后的内容
,@
是指:前的内容
这里%是通配符,:左边匹配所有.c结尾的文件,<表示将展开的所有.c文件,一个接一个地匹配命令
,形成.o文件
每一行最前面的@是指在外面使用make指令时 不显示过程,直接给出结果
(可不加)
我们也可以 自我定制执行某一步骤后,想要输出的提示内容