源程序到目标数据的生成过程通常包括以下步骤:
预处理
处理宏定义、条件编译指令、预编译指令等。
删除注释,添加行号和文件名标识,保留所有的编译器指令。
预处理后的文件为 `.i` 文件(或 `.cpp` 文件,如果是 C++)。
预编译命令:`gcc -E hello.c -o hello.i` 或者 `cpp hello.c > hello.i`。
编译
对预处理后的文件进行词法分析、语法分析、语义分析及优化。
生成汇编代码文件(`.s` 文件)。
编译命令:`gcc -S hello.i -o hello.s` 或者 `ccl hello.c`。
汇编
将汇编代码转换为机器可以执行的指令。
每一条汇编语句几乎都对应一条机器指令。
链接(如果需要生成可执行文件):
将目标文件(`.o` 或 `.obj` 文件)链接成一个可执行文件。
链接命令:`gcc -o target_file test.c`。
总结:
预处理 -> 编译 -> 汇编 -> 链接
建议:
对于简单的 C 程序,可以使用 `gcc helloworld.c` 命令直接完成从源程序到目标文件的生成。
对于复杂的程序,建议分别了解每个步骤的详细命令和参数,以便更好地控制和优化编译过程。