
目录
[1. gcc编译器和条件编译](#1. gcc编译器和条件编译)
1. gcc编译器和条件编译
我们知道在运行一个程序时需要经过预处理,编译,汇编,链接生成可执行文件。预处理主要进行展开头文件,宏替换,条件编译,删除注释等操作。gcc是一种编译器,通过命令行的形式对文件进行操作。
cs
gcc -E code.c -o code.i
编译会进行语法,语义分析并进行代码优化,并翻译成cpu架构可理解的汇编代码
cs
gcc -S code.i -o code.s
汇编会将汇编指令翻译成二进制机器码,也就是机器可识别的代码
cs
gcc -c code.s -o code.o
链接就是绑定一些动静态库文件。库是一套方法或数据集,提供接口和功能,如果我们的程序中使用了库中方法就要链接起来。在linux中动态库的文件.so结尾,静态库.a结尾。
cs
gcc code -o code
条件编译怎么用
可以记住一点,预处理的本质就是对代码进行裁剪,类似于if条件语句,根据宏定义来对代码进行裁剪。
2.make和makefile
make是一个命令,自动读取makefile,按照规则进行编译,makefile是一个文本文件,写好了编译规则。两者搭配用于自动化编译c,c++项目。
cs
myfile:myfile.c
gcc myfile.c -o myfile
_PHONY:clean
clean:
rm -f myfile
如果你文件改动了需要再次make进行更新操作,make分不清目标是文件还是命令,这就是_PHONY的作用,它是一个伪目标,代表不生成任何文件,只去执行。删除文件的操作就是make clean