2015-07-10 169 views
1

我是makefile概念的新手。所以请随时帮助我理解基础知识。makefile中链接的顺序是什么?

hellomake: hello.o hi.o mymain.o 
    gcc hello.o hi.o mymain.o 
mymain.o: mymain.c 
    gcc -c mymain.c 

hello.o: hello.c 
    gcc -c hello.c 

hi.o: hi.c 
    gcc -c hi.c 

如果我更改目标中的.o文件的顺序,那么链接的顺序是什么?记住我的mymain.o取决于hello.ohi.o

+0

基本上,他们在他给定的顺序处理。但是,您的程序通常不应该依赖订单。至少对于neewbies而言;有一些例外 - 一如既往。 – Olaf

回答

4

链接顺序没有变化;当.c/.o文件发生更改时,make会始终运行gcc hello.o hi.o mymain.o,因为这就是您要求它执行的操作。

请记住,make并没有绑定到C,也没有连接的知识。它只是运行您指定的命令来生成构建目标所需的文件。在这种情况下,您指定了订单hello.o hi.o mymain.o,这就是make的运行方式。

0

链接器从左向右处理文件。它不断创建一个未解析符号的动态列表,并使用object(.o)库来解决它们。所以,你需要首先把需要符号的静态库,然后库解析它。