linux make链接.o文件,Linux操作系统至gcc编译器、makefile
gcc编译器:
将高级语言代码编译成为机器可识别的指令代码
编译文件
编译步骤:
1.预处理,展开所有代码 gcc-E只预处理 -o 指定修改后的文件名称
2.编译:纠错,没有错误则将c语言代码编译为汇编代码 gcc -S只进行编译工作
3.汇编:将汇编代码编译为机器指令代码 gcc -c
走完汇编只是将当前的.c编译成了自己的机器指令代码
其他的函数还没有拿过来,这个文件虽然是机器指令代码,但是不能执行
4.链接:将所有调用的代码实现都拿过来生成可执行程序
库:存放实现函数代码的地方
动态库:
生成可执行程序,链接动态库,称为动态链接
文件格式 lib***.so
代码冗余量小,占用资源小,对库的依赖程度高
静态库:
生成可执行程序,链接静态库,称为静态链接
文件格式 lib***.a
直接将库文件中的代码拷贝到可执行程序中,代码冗余量高,对库的依赖程度低
(windows 下 动态.dll,静态库.lib)
gcc编译器默认链接方式是动态链接
gcc -static 链接方式指定为静态链接
Makefile
就是一个文本文件,但是有一个make命令,逐步执行makefile中记录的编译规则
makefile用于记录项目的编译规则,辅助项目的自动化编译
命名:M/makefile
#注释以#开头
#Makefile编写规则
目标对象 不一定要生成,而是为了让make能够找到依赖关系
依赖对象 主要用于判断目标对象是否是最新的
目标对象:依赖对象
[tab]为了生成目标对象所执行的命令
预定义变量
$@ 指目标对象
$^ 指所有依赖对象
$< 所有依赖对象中的第一个
wildcard 获取文件名
$()将括号中的字符串当作命令处理
命令的执行结果当作变量内容赋值给别的变量
SRC=$(wildcard./*.c)
main:$(SRC)
gcc -o $@ $^
makefile只为了生成第一个目标对象而存在,假如目标对象已经存在,make会判断依赖对象和目标对象的时间,判断目标对象是否是最新的,如果是最新的,则不需要编译,直接退出,不是最新的则重新生成
但是makefile这个特性导致只生成一个程序,因此后边如果还有目标对象要生成,是不会生成的
Makefile有个其他的特性:如果依赖对象不存在,则会在makefile中查找依赖关系,看能不能生成这个依赖对象,如果有有则生成,没有则报错退出
.PHONY --声明伪对象
伪对象:不管是不是最新的,反正每次都要重新生成
执行:make程序到当前工作目录下找makefile文件,解释执行
1.到当前目录下查找makefile文件,找不到报错
2.在文件中找第一个目标对象,并把这个对象当作终极目标
3.检测这个目标对象和依赖对象的最后一次修改时间,判断是否需要
重新编译,如果需要修改时间一样则不需要重新编译,退出
4.如果目标对象不存在,则直接生成,但是依赖对象有可能不存在
5.为了生成终极目标,首先要保证依赖对象都存在,所以会先去生成所有
依赖对象(依赖对象的生成的依赖关系也是用户在下边定义的)
声明伪对象:.PHONY
伪对象:每次都需要重新生成
假如当前目录下有多个makefile时(makefile/Makefile),优先执行makefile
但是make只能执行一个
预定义变量:$@ $^ $<
= 非即时赋值
:= 即时赋值
?= 变量有值则不重新赋值
+= 追加
四种赋值方式区别
linux make链接.o文件,Linux操作系统至gcc编译器、makefile相关推荐
- linux重命名乱码文件,Linux中重命名乱码文件
Linux下,如何将一个乱码的文件进行重命名 方法一: 命令格式:mv $(ls |egrep "[^a-zA-Z0-9.-]") tandao.tx [root@nb o]# l ...
- Linux C try 头文件,linux c 头文件
//1.Linux中一些头文件的作用: #include //ANSI C.提供断言,assert(表达式) #include //GCC.GTK,GNOME的基础库,提供很多有用的函数,如有数据结构 ...
- linux 如何打包分区文件,Linux基础------文件打包解包---tar命令,文件压缩解压---命令gzip,vim编辑器创建和编辑正文件,磁盘分区/格式化,软/硬链接...
作业一: 1)将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/1.txt(覆盖) cat /etc/passwd /etc/group > /1.txt 2)将用户信息数据库文件和用户 ...
- linux名词解释目录文件,linux的常识及术语解释
linux的常识及术语解释 本站整理 发布时间:2009-03-10 10:42:18 作者:jb51.net 我要评论 一.填空题: 1. 在Linux系统中,以 文件 方式访问设备 . ...
- linux将用户删除文件,linux 用户配制文件 用户增加及删除 以及用户属于的更改...
1.用户密码文件 /etc/passwd root : x : 0 : 0 : root : /root : / ...
- linux join两个文件,Linux使用join -a1来合并两个文件
Linux使用join -a1来合并两个文件 要合并以下两个文件,一起合并在一起,合并到1.txt中 # 1.txt Jerry 20 Alice 30 David 40 # 2.txt Jerry ...
- linux中运行.pro文件,Linux下pro*c运行配置
在Linux下运行.pc程序时,需要用到proc命令. -配置Pro*C/C++,以及链接到Oracle. 一般安装oracle时候都已经安装了pro*c,所以一般不需要再配置/etc/profile ...
- 搜索linux中大于m文件,linux 下查找大于100M的文件(转)
命令行如下 find . -type f -size +1000000k Linux系统下查找大文件或目录的技巧 当硬盘空间不够时,我们就很关心哪些目录或文件比较大,看看能否干掉一些了,怎么才能知道呢 ...
- linux 如何安全删除文件,Linux系统安全删除文件方法是什么.docx
PAGE PAGE # Linux系统安全删除文件方法是什么 很多时候我们直接删除文件都会被各种手段恢复,那么怎么 安全删除文件呢?以Linux系统为例.只有通过一些工具,才能安全 地删除数据.具体怎 ...
最新文章
- Windows下载Android源代码
- 【自动驾驶】10.百度Apollo平台 事件通信机制
- JQuery 源码解析资料
- 企业级IM应该帮助员工提高绩效,避免无关的信息干扰
- scrapy 模拟登陆
- 【已解决】清除linux系统的多余引导
- 为机场按上一双“慧眼”消灭飞机的“黑色十分钟”
- 从零开始学前端:表单制作 --- 今天你学习了吗?(CSS:Day05)
- Ext-数据交换-ajax
- 设置模糊阴影_制作带模糊效果的PPT首页
- GitHub引入了Reactions来提供对issue和pull request的反馈
- 安装Adobe Reader 时报错:HRESULT:0x80070422
- 元宇宙需要“基建狂魔”
- 用python计算工程量_总算懂了工程造价工程量计算方法
- java虚无世界_我的世界1.7.10工业虚无整合包
- 易生活(二)-APP—安卓中评论功能的实现
- 微信预览wx.previewImage黑屏
- 二十一世纪“新元宇宙”奇科幻小说原创作品系列连载【第一部】第二回 登峰时刻
- 【代理工具使用必备知识汇总】:vpn、socks5、代理客户端使用
- BBTRZ柔性矿物质绝缘防火电缆的优势