2.5 重新编译和重新链接

为了展示源文件怎样被独立编译我们会编辑主程序'main.c'将打印的问候语'world'修改为'everyone':

include "hello.h"

int

main (void)

{

hello ("everyone"); / changed from "world" /

return 0;

}

更新的'main.c'文件可以使用下面命令重新编译:

$ gcc -Wall -c main.c

它会生成新的目标文件'main.o'。而不需要'hello_fn.c'生成新的目标文件因为这个文件和它依赖的关联文件,例如头文件没有被改变。

这个新的目标文件可以和hello函数重新链接生成新的可执行文件:

$ gcc main.o hello_fn.o -o hello

新的可执行文件'hello'现在会使用新的mian函数产生下面的输出:

$ ./hello

Hello, everyone!

注意只有'main.c'会被重新编译,然后和已经出现的包含hello函数的目标文件重新链接。如果'hello_fn.c'文件被修改我们可以重新编译生成新的目标文件'hello_fn.o'然后和已经存在的'main.o'文件重新链接。

通常链接比编译快--在一个有很多源文件的大项目中重新编译那些只被修改的源文件是非常节约时间的。可以使用GNU make来自动重新编译项目中被修改的源文件。