**学习背景:**近期参与xx项目过程中,遇到较多的关于代码集成编译的知识盲区,因此需要进行相关知识的学习和扫盲。
20分钟Makefile光速入门教程_哔哩哔哩_bilibili
代码编译过程:
Traditional Compilation:黑色箭头;
Direct Binary Generation Compilation (白色箭头);
编译选项配置逻辑:
- 读取配置选项,当配置选项相矛盾时以后面的配置为准,当无法识别配置选项时,会忽略该配置并告警;
- driver按照文件的顺序进行处理,若一个文件存在问题,driver将继续处理后续的文件;若driver无法识别文件扩展名,会将该文件传递给链接器处理;
ccppc hello.c 产生以下类型文件:.out
- .o 目标文件。总是被编译器保留;
- .map 链接器生成;
- .dnm 包含基础的调试信息;
- .dla 包含基础的调试信息;
可识别的文件名:
**ld文件:**链接器指令(.ld)文件定义了可执行文件的程序段将程序段分配给不同的存储区。
eg: ccppc hello.c mylinkfile.ld
产生其他的文件:
cpp
ccppc hello.c-S //产生汇编语言
ccppc hello.c-c //产生.o文件
ccppc hello.c foo.o-archive-o libfoo.a
//This command produces alibrary of object file called libfoo.a, which contains two object files, hello.o and foo.o.
//When using the-archive option to create a library, you must use the-o option to specify a name for it.
Driver Options for Intermediate Forms of Output:
可以通过一个文件来表示编译选项;会被识别的字符: 空格、制表符、换行、双引号,不能增加注释
举例如下:
makefiles:
20分钟Makefile光速入门教程