Chinaunix首页 | 论坛 | 博客
  • 博客访问: 64772
  • 博文数量: 25
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 12
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-20 12:20
个人简介

潜心学习

文章分类

全部博文(25)

分类: LINUX

2013-11-21 10:25:42

原文地址:Makefile 学习笔记一 作者:好喜儿

 make 命令是解释Makefile

 

基本形式:

TARGET... : PREREQUISITES... 

COMMAND

目标:依赖

命令

注意:每一个命令行必须以[Tab]

字符开始,[Tab] 字符告诉make此行是一个命令行。make按照命令完成相应的动作。

这也是书写Makefile 中容易产生,而且比较隐蔽的错误。

简单的例子

但需要注意:反斜线之后不能有空格(这也是大

家最容易犯的错误,错误比较隐蔽

注意:就是说所有的命令行必需以[Tab]  字符开始,但并不是

所有的以[Tab] 键出现行都是命令行。但make程序会把出现在第一条规则之后的所有以

[Tab] 字符开始的行都作为命令行来处理

 

 

目标“clean”不是一个文件,它仅仅代表执行一个动作的标识。正常情况下,不

需要执行这个规则所定义的动作。make clean 后会执行clean之后的动作。

因此在执行make时,它所指定的动作不会被执行。除非在执行make时明确地

指定它。而且目标“clean”没有任何依赖文件,它只有一个目的,就是通过这个目标

名来执行它所定义的命令。Makefile 中把那些没有任何依赖只有执行动作的目标称为

“伪目标”(phony targets )。

 

Makefile中的目标可能会很多,但是第一条规则中的目标将被确立为最终目标。

 

使用变量:

这样的话一是方便使用,第二点是需要修改的话改一个地方就可以了。

 

清除规则:

1.  通过“.PHONY ”特殊目标将“clean”目标声明为伪

目标。避免当磁盘上存在一个名为“clean”文件时,目标“clean”所在规则的命令无

法执行。

2. 在命令行之前使用“”,意思是忽略命令

rm”的执行错误(参考  5.4  命令的错误  一节)

hello.c

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include"test.h"

  3. int main(int argc, char **argv)
  4. {    
  5.     test_hello();
  6.     printf(",world!\n");
  7. }
test_hello.c

点击(此处)折叠或打开

  1. #include<stdio.h>

  2. void test_hello()
  3. {
  4.     printf("hello");
  5. }
test.h

点击(此处)折叠或打开

  1. extern void test_hello()
Makefile

点击(此处)折叠或打开

  1. hello:test_hello.o test.h hello.c
  2.     gcc -o hello hello.c test_hello.o
  3. test_hello.o:test_hello.c
  4.     gcc -c test_hello.c

  5. .PHONY:clean
  6. clean:
  7.     rm *.o hello




阅读(896) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~