前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Linux】gcc/g++的使用 自动化构建工具make/makefile的使用

【Linux】gcc/g++的使用 自动化构建工具make/makefile的使用

作者头像
aosei
发布2024-01-23 14:34:20
2130
发布2024-01-23 14:34:20
举报
文章被收录于专栏:csdn-nagiYcsdn-nagiY

一.gcc的使用

在学习C语言时,我们了解了预处理阶段要做的事:->预处理 这其中会经历两个阶段:编译和链接 而编译又分为三个阶段:预编译,编译,汇编 通过不同的选项,可以让gcc停在以上相应的阶段。

代码语言:javascript
复制
   //-o 后面紧跟文件名,当然你也可以命名成其它名字
    gcc -E test.c -o test.i;   //告诉gcc,从现在开始进行程序的翻译,做完预处理工作后就停下来

	gcc -S test.i -o test.s   //从现在开始程序的翻译,编译工作做完后停下

	gcc -c test.c -o test.o   //做完汇编工作后停下
		                     //.o 文件可重定位目标二进制文件,简称目标文件,
		                     //不可以独立执行,需要经过链接才能执行
   
    gcc test.o -o test.exe  //连接,生成可执行文件或库文件


    //如果不想写这么麻烦,可以使用 -o 直接生成可执行文件
   gcc test.c -o test.exe

这里有一个记忆的小窍门,我们电脑左上角的Esc键,顺序刚好和上面的顺序一致,所以不记得的时候,看一眼电脑左上角,不过要记住大小写。

常用选项: -g :gcc默认是release版本,是不支持调试的,-g可以生成调试信息,但相应的文件的体积 会变大; -static: 静态连接,文件体积也会变大

运行生成的可执行文件: ./test.exe

g++和gcc的使用差不多,就不赘述了。

二.make/makefile

make 是指令,makefile是文件,两个是配套使用的。

makefile文件格式:

代码语言:javascript
复制
//依赖关系(test是可执行文件,依赖源文件test.c生成,注意这个test.c文件必须在当前目录下 
//能找到
test:test.c    
    gcc test.c -o test;   //依赖方法,就是test.c 到可执行文件的生成方式
clean:             //clean无依赖关系
    rm -rf test;

所以我们现在要使用gcc编译生成可执行文件时,只需一次性把代码写到makefile文件里,在使用make命令就可以一件生成了,省去了重复写的麻烦,并且这个make是递归式生成的,所以写依赖关系和依赖方法时,不用担心顺序的问题。

不能重复make?

可是我们发现一次make后,第二次就不能make了

这是因为make有这样一个规则: 对于可执行文件和源文件的最后一次修改时间若可执行文件新于源文件,则不需要再次编译; 若可执行文件老于源文件,则重新编译。

键入 stat 可查看文件的各个时间:

项目清理

clean是负责项目清理的,我们希望它总是被执行,所以可以用.PHONY 修饰 .PHONY 是伪目标,伪目标的特性是总是被执行

常用符号

$@ :代替依赖关系:的左边 ^ :代替依赖关系:的右边(不管右边有几个文件,都可以用一个^代替) @:在依赖方法语句的前面加上@,可以在使用make时,不回显依赖方法的语句

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.gcc的使用
  • 二.make/makefile
    • makefile文件格式:
      • 不能重复make?
        • 项目清理
          • 常用符号
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档