在不同上下文中,编译的意思是不一样的。我们通常所说的编译,是一种广义的说法,相当于构建,即编译项目相关的所有文件,并链接。比如编译最简单的hello world
程序,生成可执行程序hello
:
$ gcc hello.c -o hello
而从狭义上讲,编译仅仅指编译器所完成的工作,而不包含汇编器、链接器等工具所完成的工作。通常来讲,编译器生成汇编文件(.s
文件),如:
$ gcc -S hello.c
在实践中,汇编步骤不会单独执行,只有链接的过程会独立出来,直接生成目标代码(.o
文件)的命令如下:
$ gcc -c hello.c
gcc
本身其实是个驱动程序,它负责命令行参数转换和调用相关程序,真正的编译器是cc1
或者cc1plus
。使用-v
参数,可以显示出gcc
调用其它程序时使用的命令行参数,如:
$ gcc -v -c hello.c