Makefile是什么东东?有什么用?怎么用?
2010-04-22 15:34
211 查看
makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接-----但是不是所有的文件都需要重新编译,makefile能够纪录文件的信息,决定在链接的时候需要重新编译哪些文件!
在unix系统下,makefile是与make命令配合使用的。
举个例子吧,我现在有main.c 、window.c 、model.c 、data.c 4个.c文件和window.h 、model.h 、data.h 3个.h文件。
main.c是主程序,里面有main()函数。其他的都是模块。
如果要生成最终的可执行文件,要做以下步骤:
1、分别编译window.c 、model.c 、data.c 、main.c ,将会得到3个目标文件:window.o 、model.o 、data.o 、main.o
2、把这4个.o (在windows下就是.obj)文件链接起来,得到main.out(在windows下就是main.exe)。
那么这些文件就要有逻辑关系,否则编译器不知道怎么编译。
all:main.out
main.out:main.o window.o model.o data.o
gcc -o main.out main.o window.o model.o data.o
#上面的意思是说:
#all:main.out
如果想要编译所有:make all,那么将会生成main.out可执行文件。
#main.out:main.o window.o model.o data.o
而要生成这个main.out,需要依赖main.o,window.o,model.o,data.o 4个文件。
# gcc -o main.out main.o window.o model.o data.o
这句是调用编译器编译,vc用的是cl。变异的时候可以加上很多的参数、定义的宏、链接库路径等。
当然,还没有完呢,这些main.out依赖的这些 .o 怎么来的?
window.o:window.c window.h
gcc -c window.c
model.o:model.c model.h
gcc -c model.c
data.o:data.c data.h
gcc -c data.c
上面的-c参数是指定编译器编译出一个.o文件就可以了,不要再寻找main()函数做链接工作。
这些和到一起,就是一个makefile,当然这些功能还太少,可以加上很多别的项目。但宗旨就是:让编译器知道要编译一个文件需要依赖其他的哪些文件。当那些依赖文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译相应的模块。
现在的VC++真是太好了,不用一个字一个字的去敲Makefile 了。 ^_^
在unix系统下,makefile是与make命令配合使用的。
举个例子吧,我现在有main.c 、window.c 、model.c 、data.c 4个.c文件和window.h 、model.h 、data.h 3个.h文件。
main.c是主程序,里面有main()函数。其他的都是模块。
如果要生成最终的可执行文件,要做以下步骤:
1、分别编译window.c 、model.c 、data.c 、main.c ,将会得到3个目标文件:window.o 、model.o 、data.o 、main.o
2、把这4个.o (在windows下就是.obj)文件链接起来,得到main.out(在windows下就是main.exe)。
那么这些文件就要有逻辑关系,否则编译器不知道怎么编译。
all:main.out
main.out:main.o window.o model.o data.o
gcc -o main.out main.o window.o model.o data.o
#上面的意思是说:
#all:main.out
如果想要编译所有:make all,那么将会生成main.out可执行文件。
#main.out:main.o window.o model.o data.o
而要生成这个main.out,需要依赖main.o,window.o,model.o,data.o 4个文件。
# gcc -o main.out main.o window.o model.o data.o
这句是调用编译器编译,vc用的是cl。变异的时候可以加上很多的参数、定义的宏、链接库路径等。
当然,还没有完呢,这些main.out依赖的这些 .o 怎么来的?
window.o:window.c window.h
gcc -c window.c
model.o:model.c model.h
gcc -c model.c
data.o:data.c data.h
gcc -c data.c
上面的-c参数是指定编译器编译出一个.o文件就可以了,不要再寻找main()函数做链接工作。
这些和到一起,就是一个makefile,当然这些功能还太少,可以加上很多别的项目。但宗旨就是:让编译器知道要编译一个文件需要依赖其他的哪些文件。当那些依赖文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译相应的模块。
现在的VC++真是太好了,不用一个字一个字的去敲Makefile 了。 ^_^
相关文章推荐
- Makefile是什么东东?有什么用?怎么用?
- ARC是什么东东?retain和release到底怎么玩?(★firecat推荐★)
- Makefile是什么?如何编写?怎么写能通用呢?
- ARP防火墙:网卡处于混杂模式什么原因,怎么办?
- 怎么知道网站是用什么程序做的
- Windows10 ISO光盘镜像文件怎么打开需要什么工具
- .net应该学什么怎么学---初学者必看
- window系统不知道按了什么快捷键,当前操作范围就会出个蓝框,怎么取消
- css中导入样式表和链接样式表有什么区别,我不是问语法,而是问内在区别,还有我怎么才能体会到他们的区别
- Hadoop到底能做什么?怎么用hadoop?
- .Net应该学什么怎么学(三)
- 不是我要怎么做,是别人要什么
- php转义字符怎么用?echo "gde/n/r/t/v hdiiri";这样有什么不对么?为什么没有换行和tab?
- Python的GIL是什么、怎么来的、对性能的影响
- .Net应该学什么怎么学(二)
- Servlet是什么东东?
- 什么破东东
- SEO是什么,SEO怎么做,SEO搜索引擎基础知识大全
- topcoder504.5 不会作,什么都不会,好难,我还能干什么只能模拟,只能敲代码谁能告诉我该怎么作
- 拿什么守护你的Node.JS进程: Node出错崩溃了怎么办?