linux_c 网络开发日记(2)makefile简介
2015-07-27 16:57
513 查看
makefile简介
当然在我们做一个大型开发是不可能一个一个的GCC去,这个时候我们的makefile就派上用场了。GNU的make能够使整个软件工程的编译、链接只需要一个命令就可以完成。所以程序员必须得会makeflie。
make在执行时,只需要一个名为makefile(Makefile)的文件。makefile文件描述了整个工程的编译,链接等规则。其中包括:工程中的那些源文件需要编译以及如何编译;需要创建那些库文件以及如何让创建这些库文件、最后产生我们想要得到的可执行文件。
makefile规则示例
hello:main.o func1.o func2.ogcc main.o func.o func2.o -o hello
main.o:main.c
gcc -c main.c
func1.o:func1.c
gcc -c func1.c
func2.o:func2.c
gcc -c func2.c
.PHONY:clean
clean:
rm -f hello main.o func1.o func2.o
规则:用于说明如何产生一个或多个目标文件,规则格式如下:
targets:prerequisities
command
目标:依赖
命令 //命令需要以【Tab】键开始//
在makefile中,规则的顺序很重要,因为makefile中只应该有一个最终目标,其他的目标都是这个目标所带出来的,所以一定要让make知道你的最终目标是什么。一般来说,定义在makefile中的目标可能会有很多,但是第一条规则种的目标将被确立为最终目标。
文件名
makefile命令默认在当前目录下寻找名字为makefile 或者Makefile的工程文件,当名字不为这两者之一时,可以使用:make -f 文件名 的命令。
伪目标
makefile中把那些没有任何依赖只有执行动作的目标称为“伪目标(phony targets)”如上面例子中
.PHONY:clean
clean:
rm -f hello main.o func1.o func2.o
“.PHONY”将“clean”目标声明为伪目标
变量
当有大量重复性修改时我们可以使用变量。例子:
obj=
hello:$(obj)
gcc
$(obj) -o hello
在makefile中,存在系统默认的自动化变量
$^:代表所有依赖文件
$@:代表目标
$<:代表第一个依赖文件。
例:
hello:main.o func1.o func2.o
gcc main.o func.o func2.o -o hello
可以改写为:
hello:main.o func1.o func2.o
gcc $^ -o $@
杂项
makefile中“#”字符后的内容被视作注释hello:main.o func1.o func2.o
@gcc main.o func.o func2.o -o hello
@:取消回显
相关文章推荐
- HttpContext
- 2008 Asia Regional Beijing (网络流+树状数组+贪心)hdu2485 - 2494
- 指向字符串的指针为何不能用来修改此字符串(c语言)http://blog.sina.com.cn/s/blog_68ff96b70101him1.html
- java 网络编程
- RabbitMQ安装不当出现的问题:TCP connection succeeded but Erlang distribution failed
- 网络编程 TCP
- Python获取CPU使用率、内存使用率、网络使用状态
- Virtualbox网络设置和无UI启动
- HTTP1.1中CHUNKED编码解析
- http超时设置
- 网络编程 TCP
- 计算机网络基础
- CentOS使用指南一(网络配置)
- 网络布局基础
- http status code
- http断点续传原理:http头Range 、 Content-Range
- HTTP协议
- HTTP/1.0与HTTP/1.1之间的差别
- ACM学习历程—SNNUOJ 1110 传输网络((并查集 && 离线) || (线段树 && 时间戳))(2015陕西省大学生程序设计竞赛D题)
- Cocos2d-x 3.6 HttpRequest设置回调的方法