免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 861 | 回复: 0
打印 上一主题 下一主题

使用make - 1 make实例文件分析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-26 20:24 |只看该作者 |倒序浏览
使用make - 1 make实例文件分析
一、概述:
make是一个解释makefile文件中的指令的命令工具。
makefile带来的好处是---自动化编译。
make文件的操作规则:
1 如果工程没有编译过,所有C文件都要被编译并连接。
2 如果工程中某几个C文件被修改,则编译修改的C文件并连接。
3 如果工程的头文件被修改了,需要编译引用这些头文件的所有C文件并连接。
make是通过判断目标文件和目标文件的依赖文件的最后修改时间决定是否重新编译目标文件,如果依赖文件的修改时间晚于目标文件,则目标文件需要重新编译。
makefile文件基本格式:
target ... : prerequisites ...
(Tab)command
...
...
二、makefile实例
1 下面是一个普通makefile的实例
-------------------------------------------
edit : main.o command.o display.o
    gcc -o edit main.o command.o display.o
main.o : main.c
    gcc -c main.c
command.o : command.c command.h
    gcc -c command.c
display.o : display.c display.h
    gcc -c display.c
-------------------------------------------
说明:
a command行要以tab开始。
b make会在当前目录下找名字为makefile的文件或在makefile文件夹的文件。
2 在makefile文件中使用变量
-------------------------------------------
objects = main.o command.o display.o
edit : $(objects)
    gcc -o edit $(objects)
main.o : main.c
    gcc -c main.c
command.o : command.c command.h
    gcc -c command.c
display.o : display.c display.h
    gcc -c display.c
-------------------------------------------
说明:
a makefile文件中可以使用变量,就是一个字符串,可以理解为C语言中的宏。
b 使用$(objects)的方式来使用定义的变量。
3 让make自动推导依赖关系
-------------------------------------------
objects = main.o command.o display.o
edit : $(objects)
    gcc -o edit $(objects)
main.o :  
command.o : command.h
display.o : display.h
-------------------------------------------
说明:
由上例可见,目标文件的生成可以省略.c文件和编译命令。
4 另类风格的makefile
不推荐使用,比较凌乱。
5 清空目标文件规则
每个makefile文件都应该有一个清空目标文件(.o文件和执行文件)的规则。
-------------------------------------------
objects = main.o command.o display.o
edit : $(objects)
    gcc -o edit $(objects)
main.o : main.c
    gcc -c main.c
command.o : command.c command.h
    gcc -c command.c
display.o : display.c display.h
    gcc -c display.c
clean :
    rm edit $(objects)
-------------------------------------------
更稳健的做法是:
-------------------------------------------
objects = main.o command.o display.o
edit : $(objects)
    gcc -o edit $(objects)
main.o : main.c
    gcc -c main.c
command.o : command.c command.h
    gcc -c command.c
display.o : display.c display.h
    gcc -c display.c
.PHONY : clean
    clean :
        -rm edit $(objects)
    rm edit $(objects)
-------------------------------------------


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/66091/showart_1011981.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP