"cl"是Visual C++的编译器,即"Compiler"的缩写(叫编译推进器更合适)。在windows命令行下,/c参数表示只编译,不链接,即将.c文件编译成.obj文件,而不调用连接器生成.exe文件。如果不加这个参数,cl就会在编译生成的.obj文件后将其与默认的C运行库链接,产生可执行文件.exe。
编译器编译源代码后生成的文件(.c文件)叫做目标文件(windows下是.obj文件,linux下是.o文件),目标文件从结构上来讲是已经编译后的可执行文件格式,只是还没有经过链接的过程,毕竟他是从cl.exe编译过来的。
当我们有两个目标文件时,是如何将它们链接起来形成一个可执行文件?这基本上就是链接的核心内容:静态链接。对于链接器(link.exe)来说,整个链接过程中,它就是将几个输入目标文件加工后合并成操作系统定义的可执行文件格式的可执行文件。对于中间的工程,我们暂不讨论。