您的位置:首页 > 其它

多个源文件进行编译,即 makefile 的编写

2014-06-10 21:53 225 查看
makefile的好处是防止源文件的重复编译

比如有好多个源文件,某天对其中一个源文件进行修改,如果不写makefile的话,需要将整个工程的所有文件重新编译一遍,非常麻烦,有了makefile,说明了每个源文件的依附关系,当某个源文件改变的时候只需重新编译一下关联的源文件就好。

例如:有以下文件

one.h

one.c

two.h

two.c

main.c

main.c 中引入one.h 和two.h两个头文件,one.c two.c 分别实现两个头文件中定义的函数

有两种方式编译运行该程序,

一:手动单独编译

gcc -c one.c

gcc -c two.c

gcc -c main.c

gcc -o main main.o one.o two.o

./main

二:makefile

那么只需在任何一个文本编辑器里面写下如下命令,并保存为makefile

main:main.o one.o two.o

tab键gcc(或者cc)-o main main.o one.o two.o

main.o:main.c one.h two.h

tab键gcc(或者cc)-c main.c

one.o:one.c one.h

tab键gcc(或者cc)-c one.c

two.o:two.c two.h

tab键gcc(或者cc)-c two.c

这些源文件都需要在同一个目录下,并且在main.c中引入one.h 和two.h的时候要用"one.h" "two.h"不要用<>否则编译器会到系统类库文件中去找,是找不到的。

然后在同一目录的终端下,输入make命令,那么编译就开始了,没有什么错误的话,执行./main就可以让你的程序跑起来了。

还可以对makefile进行精简:

首先有三个符号:

1 $@ 代表目标文件

2 $< 代表第一个文件

3$^ 代表所有依赖文件

所以上面命令可以精简为:

main:main.o one.o two.o

tab键gcc(或者cc)-o $@ $^

main.o:main.c one.h two.h

tab键gcc(或者cc)-c $<

one.o:one.c one.h

tab键gcc(或者cc)-c $<

two.o:two.c two.h

tab键gcc(或者cc)-c $<

以上makefile还可以精简:

一个新的符号:.c.o

该符号自动搜索相关联的源文件和头文件

于是makefile还可以写为:

main:main.o one.o two.o

tab键gcc(或者cc)-o $@ $^

.c.o:

tab键gcc(或者cc) $<

最好在加上clean命令,将生成的目标文件和执行文件删除,遵守优雅简洁原则,呵呵,方便再次编译

clean:

ab键gcc(或者cc)rm main main.o one.o two.o

makefile的格式大家要记住了,至于问什么这样写,只能说这是标准,makefile还有很多高深的用法,以后在逐渐去学习。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐