Linux下的C编程:gcc编译学习笔记

什么是gcc

Linux环境下的一个C/C++编译器

编译过程

  • 预处理:展开宏定义;处理库文件;处理条件编译;删除注释等
    gcc -E source.c -o rename.i (一般使用的命令)
    gcc -E -C source.c -o rename.i(加入选项-C,阻止删除注释)
    gcc -E source.c -o rename.i -D CONVERT (选项-D可加入宏定义,搭配 ifdef 可实现调试等功能)
    预处理后的文件是可显示的文本文件
  • 编译:高级语言–>汇编语言
    gcc -S source.c(.i) -o rename.s
    C编译器在具体的翻译之前,会先对源程序进行词法分析、语法分析、语义分析,根据分析的结果进行代码优化、储存分配
  • 汇编:汇编语言–>机器语言
    gcc -c source.c(.s) -o rename.o
    把汇编生成的机器语言目标代码文件称为可重定位目标文件
  • 链接:生成可执行文件
    gcc source.c(.o) -o rename
    在链接阶段加入参数-l、-L、-I可以链接需要用到的库文件、头文件
  • 参数-l: 指定要链接的库,比如要链接数学库,则加入参数-lm,因为数学库文件的全名是libm.so,去掉前缀lib和后缀.so就是库名m,其他库同理。
  • 参数-L:在/lib/usr/lib/usr/local/lib三个目录下的库文件可以直接使用-l命令连接,对于其他的库文件,需要用-L去指定所在目录,如:-L/xx/yy -lhello这个命令可以链接位于/xx/yy目录下的libhello.so库
  • 参数-I: 指定头文件所在目录,适用于源文件和头文件不在同一个目录下

注:上面用到的 -S、-c 等命令不仅仅能表示单个过程,如果使用命令:gcc -c source.c -o rename.o 表示的是预处理、编译、汇编,但不链接,生成 .o 文件。

多文件编译

适用于含有自己编写的头文件等情况

  • 如果结构比较简单,直接编译即可:gcc source1.c source2.c -o prog (也可以使用通配符*.c)
  • 为了免去修改一个文件都要重新编译所有文件的消耗,可以分别将每一个 .c 源文件用 -c命令 编译为.o文件,最后再进行链接
  • 编写makefile文件

编写Makefile

通过编写Makefile文件规定编译的过程和规则

  • 基本格式:
target1:requires
	command1
target2:requires
	command2
	......
operator:
    command

target是要生成的目标文件,requires是生成target所需的依赖文件。第一个target是最终的目标文件。operator是自定义的操作,常见的是clean命令,用于清理中间文件。

clean:
	rm *.o *.s
  • 通过make命令调用Makefile文件,make + 命令 调用自定义的命令
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值