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相关推荐

  1. linux重命名乱码文件,Linux中重命名乱码文件

    Linux下,如何将一个乱码的文件进行重命名 方法一: 命令格式:mv $(ls |egrep "[^a-zA-Z0-9.-]") tandao.tx [root@nb o]# l ...

  2. Linux C try 头文件,linux c 头文件

    //1.Linux中一些头文件的作用: #include //ANSI C.提供断言,assert(表达式) #include //GCC.GTK,GNOME的基础库,提供很多有用的函数,如有数据结构 ...

  3. linux 如何打包分区文件,Linux基础------文件打包解包---tar命令,文件压缩解压---命令gzip,vim编辑器创建和编辑正文件,磁盘分区/格式化,软/硬链接...

    作业一: 1)将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/1.txt(覆盖) cat /etc/passwd /etc/group > /1.txt 2)将用户信息数据库文件和用户 ...

  4. linux名词解释目录文件,linux的常识及术语解释

    linux的常识及术语解释 本站整理   发布时间:2009-03-10 10:42:18   作者:jb51.net   我要评论 一.填空题: 1. 在Linux系统中,以 文件 方式访问设备 . ...

  5. linux将用户删除文件,linux 用户配制文件 用户增加及删除 以及用户属于的更改...

    1.用户密码文件 /etc/passwd root  :   x   :    0    :       0    :          root      :     /root    :    / ...

  6. linux join两个文件,Linux使用join -a1来合并两个文件

    Linux使用join -a1来合并两个文件 要合并以下两个文件,一起合并在一起,合并到1.txt中 # 1.txt Jerry 20 Alice 30 David 40 # 2.txt Jerry ...

  7. linux中运行.pro文件,Linux下pro*c运行配置

    在Linux下运行.pc程序时,需要用到proc命令. -配置Pro*C/C++,以及链接到Oracle. 一般安装oracle时候都已经安装了pro*c,所以一般不需要再配置/etc/profile ...

  8. 搜索linux中大于m文件,linux 下查找大于100M的文件(转)

    命令行如下 find . -type f -size +1000000k Linux系统下查找大文件或目录的技巧 当硬盘空间不够时,我们就很关心哪些目录或文件比较大,看看能否干掉一些了,怎么才能知道呢 ...

  9. linux 如何安全删除文件,Linux系统安全删除文件方法是什么.docx

    PAGE PAGE # Linux系统安全删除文件方法是什么 很多时候我们直接删除文件都会被各种手段恢复,那么怎么 安全删除文件呢?以Linux系统为例.只有通过一些工具,才能安全 地删除数据.具体怎 ...

最新文章

  1. Windows下载Android源代码
  2. 【自动驾驶】10.百度Apollo平台 事件通信机制
  3. JQuery 源码解析资料
  4. 企业级IM应该帮助员工提高绩效,避免无关的信息干扰
  5. scrapy 模拟登陆
  6. 【已解决】清除linux系统的多余引导
  7. 为机场按上一双“慧眼”消灭飞机的“黑色十分钟”
  8. 从零开始学前端:表单制作 --- 今天你学习了吗?(CSS:Day05)
  9. Ext-数据交换-ajax
  10. 设置模糊阴影_制作带模糊效果的PPT首页
  11. GitHub引入了Reactions来提供对issue和pull request的反馈
  12. 安装Adobe Reader 时报错:HRESULT:0x80070422
  13. 元宇宙需要“基建狂魔”
  14. 用python计算工程量_总算懂了工程造价工程量计算方法
  15. java虚无世界_我的世界1.7.10工业虚无整合包
  16. 易生活(二)-APP—安卓中评论功能的实现
  17. 微信预览wx.previewImage黑屏
  18. 二十一世纪“新元宇宙”奇科幻小说原创作品系列连载【第一部】第二回 登峰时刻
  19. 【代理工具使用必备知识汇总】:vpn、socks5、代理客户端使用
  20. BBTRZ柔性矿物质绝缘防火电缆的优势

热门文章

  1. ListView使用技巧
  2. 脏读和数据库一致性的分析
  3. 下面我将随机抽取一名幸运女生,XXXXX
  4. hdu 1872(看病要排队)(优先队列)
  5. vs2012中使用localdb实例还原一个sql server 2008r2版本的数据库
  6. dns在企业网络中的应用
  7. 基于SSM实现汽车租赁系统
  8. 算法每日练习之判断完数
  9. 基因组重复序列检测:RepeatMasker
  10. 新手探索NLP(十二)——文本聚类