Makefile .PHONY用法
2017-02-22 14:55
1056 查看
==================================================================================
我的理解:
拿clean举例,如果make完成后,自己另外定义一个名叫clean的文件,再执行make clean时,将不会执行rm命令。
为了避免出现这个问题,需要.PHONY: clean
以上引用自:http://www.cnblogs.com/chenyadong/archive/2011/11/19/2255279.html
==================================================================================
Makefile中非常游泳的三个变量:$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。
1、创建hello.c文件
#include <stdio.h>
int main(){
printf(".PHONY 测试!\n");
}
2、编写Makefile
$(CC) = gcc
all:hello test //hello和test为两目标文件
hello :hello.c
$(CC) -o $@ $<
test :hello.c
$(CC) -o $@ $<
clean:
rm hello
3、执行编译和删除命令(此时可以顺利执行)
#make
#make clean
4、在当前目录下创建clean文件,此时执行make clean
报log如下,没有执行删除hello操作
make clean
make: “clean”是最新的。
5、在Makefile修改如下,此时顺利执行
$(CC)
= gcc
.PHONY:clean
all:hello test
hello :hello.c
$(CC)
-o $@ $<
test :hello.c
$(CC)
-o $@ $<
clean:
rm
hello
总结:
当前目录中没有clean这个文件,输入“make clean”就可以删除hello可执行文件,但在当前目录创建clean文件,再次输入“make clean”,目标被认为是最新的,而不去执行规则所定义的命令。所以rm hello命令不会被执行。为了解决问题,我们将目标clean定义成伪目标。
也就是添加:
.PHONY:clean
那么目录中不论是否有clean文件,只要输入“make clean”就能执行rm命令了。
当一个目标被声明为伪目标后,make在执行规则时不会去试图去查找隐含规则来创建它。这样就提高了make的执行效率,也不用担心由于目标和文件名重名了。
我的理解:
拿clean举例,如果make完成后,自己另外定义一个名叫clean的文件,再执行make clean时,将不会执行rm命令。
为了避免出现这个问题,需要.PHONY: clean
以上引用自:http://www.cnblogs.com/chenyadong/archive/2011/11/19/2255279.html
==================================================================================
Makefile中非常游泳的三个变量:$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。
1、创建hello.c文件
#include <stdio.h>
int main(){
printf(".PHONY 测试!\n");
}
2、编写Makefile
$(CC) = gcc
all:hello test //hello和test为两目标文件
hello :hello.c
$(CC) -o $@ $<
test :hello.c
$(CC) -o $@ $<
clean:
rm hello
3、执行编译和删除命令(此时可以顺利执行)
#make
#make clean
4、在当前目录下创建clean文件,此时执行make clean
报log如下,没有执行删除hello操作
make clean
make: “clean”是最新的。
5、在Makefile修改如下,此时顺利执行
$(CC)
= gcc
.PHONY:clean
all:hello test
hello :hello.c
$(CC)
-o $@ $<
test :hello.c
$(CC)
-o $@ $<
clean:
rm
hello
总结:
当前目录中没有clean这个文件,输入“make clean”就可以删除hello可执行文件,但在当前目录创建clean文件,再次输入“make clean”,目标被认为是最新的,而不去执行规则所定义的命令。所以rm hello命令不会被执行。为了解决问题,我们将目标clean定义成伪目标。
也就是添加:
.PHONY:clean
那么目录中不论是否有clean文件,只要输入“make clean”就能执行rm命令了。
当一个目标被声明为伪目标后,make在执行规则时不会去试图去查找隐含规则来创建它。这样就提高了make的执行效率,也不用担心由于目标和文件名重名了。
相关文章推荐
- makefile 递归用法和.PHONY的讲解
- makefile中目标all与phony用法
- Makefile学习笔记-wildcard notdir patsubst用法
- Makefile中wildcard的用法
- makefile高级用法--make 的运行
- makefile的最基本用法示例
- Makefile 中几种等号的用法
- 学习make工具的用法及makefile的写法
- makefile里PHONY的相关介绍
- Makefile中的wildcard用法
- linux下Makefile用法(基础)
- Makefile(1) --- .PHONY
- Makefile中 wildcard 用法
- Makefile中的wildcard用法
- Makefile文件的格式与用法
- makefile用法及作用
- makefile 中的PHONY
- C语言编译的顺序。关于 .c 文件 .h 文件的用法。Makefile文件简单概念。
- make和makefile的用法笔记
- Makefile中的wildcard用法