注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

0与1构筑世界,程序员创造时代

软件架构设计 Java编程

 
 
 

日志

 
 

C学习笔记 - GNU Make 基础 | GNU Make basic knowledge  

2012-10-30 20:28:21|  分类: C/C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
文章声明


作者:傲风(aofengblog@163.com)       编写时间:2012年10月30日

网址:http://aofengblog.blog.163.com

作者保留所有权利,转载请保留文章全部内容或者说明原作者和转载地址!







当代码数量达到程序后,项目的编译,链接,生成目标文件不再是一两行命令的事情。这个时候,GNU Make就派上用场了。

Makefile查找规则 | Makefile lookup rules

默认的情况下,make 会在工作目录(执行make 的目录)下按照文件名顺序寻找makefile文件读取并执行,查找的文件名顺序为:“GNUmakefile”、“makefile”、“Makefile”。不推荐使用“GNUmakefile”这个文件名,因为以此命名的文件只有“GNU make”才可以识别,而其他版本的make程序只会在工作目录下“makefile”和“Makefile”这两个文件。

"make"编译规则 | "make" compilation rules

1、C源代码文件在上次make之后有修改,本次make时会重新编译。
2、C头文件在上次make之后有修改,在本次make时所有包含此头文件的C源代码文件都会重新编译。

Makefile语法格式 | Makefile syntax format

Makefile 描述规则格式:
TARGET: PREREQUISITES
    COMMAND

说明:
  • target:规则的目标。
  • prerequisites:规则的依赖
  • command:规则的命令行
   
1、每一个命令行必须以[Tab]字符开始,[Tab]字符告诉 make 此行是一个命令行。make按照命令完成相应的动作。这也是书写Makefile 中容易产生,而且比较隐蔽的错误。
2、在书写时,一个较长行可以使用反斜线(\)分解为多行,这样做可以使Makefile清晰、容易阅读。注意:反斜线之后不能有空格(这也是大家最容易犯的错误,而且错误比较隐蔽)。
3、Makefile中把那些没有任何依赖只有执行动作的目标称为“伪目标”(phony targets)。
4、默认的情况下,make执行Makefile中的第一个规则
5、Makefile 中“#”字符后的内容被作为是注释内容。如果此行的第一个非空字符为“#”,那么此行为注释行。注释行的结尾如果存在反斜线(\),那么下一行也被作为注释行

自动推导规则 | Automatic derivation rules

在使用make编译.c源文件时,可以省略编译一个.c文件所使用的命令。这是因为make存在一个默认的规则,能够自动完成对.c文件的编译并生成对应的.o文件。
main.o: hello.h
等同于
main.o: hello.h
gcc -o main.o main.c hello.h

伪目标 | Phony target

.PHONY: clean
clean:
-rm edit $(objects)
1)通过“.PHONY”特殊目标将“clean”目标声明为伪目标。防止当磁盘上存在一个名为“clean”文件时,“clean”所在规则的命令无法执行
2)在命令行之前使用“-”,意思是忽略命令“rm”的执行错误


<正文结束>
  评论这张
 
阅读(690)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017