makefile中的伪目标,强制目标和双冒号规则
来源:互联网 发布:js数组去重排序的方法 编辑:程序博客网 时间:2024/05/16 06:38
----伪目标----
target :
commands
如果makefile 所在目录没有target 同名文件:make target 则导致commands 总是被执行。
如果makefile 所在目录下存在target 同名文件:make target 则commands 不被执行,认为target 总是最新的。
.PHONY:target
target:
commands
不论makefile 所在目录下存不存在与target 同名文件,make target 导致commands 的执行,与上一种写法的区别是引用'.PHONY' 的意义所在。
-----强制目标-----
target:
因为没有命令,所以make target ,与makefile 所在目录下是否存在与target 同名的文件没有直接关系。
-----双冒号规则-----
target::
commands
无论makefile 所在目录下存不存在与target 同名文件,make target 导致commands 的执行,与使用'.PHONY' 定义的伪目标效果相同。
-----------------------------------------------------------------
----------1
.PHONY target
all:target
commands1
# 伪目标
target:
commands
----------2
all:target
commands1
# 伪目标
target:
commands
---------3
all:target
commands1
# 强制目标
target:
---------4
all:target
commands1
# 双冒号规则
target::
commands
1 和4make all 执行情况相同,无论makefile 所在目录下存不存在与target 同名文件,commands1 和commands 都被执行。
2 和3make all 执行情况在makefile 所在目录下存在与target 同名文件,commads 不被执行( 认为target 目标是最新的) ,commands1 将被执行;而如果不存在与target 同名的文件,则2 运行效果与1 和4 相同,3 运行将导致commands1 的执行。
>rm *
>vim Makefile
>cat -n Makefile
1 .PHONY:target1
2 all1:target1
3 echo "all1_target1_.PHONY_command_all1"
4 target1:
5 echo "all1_target1_.PHONY_command_target1"
6
7 all2:target2
8 echo "all2_target2_command_all2"
9 target2:
10 echo "all2_target2_command_target2"
11
12 all3:target3
13 echo "all3_target3_force_command_all3"
14 target3:
15
16 all4:target4
17 echo "all4_target4_::_command_all4"
18 target4::
19 echo "all4_target4_::_command_target4"
20
>make all1
echo "all1_target1_.PHONY_command_target1"
all1_target1_.PHONY_command_target1
echo "all1_target1_.PHONY_command_all1"
all1_target1_.PHONY_command_all1
>make all2
echo "all2_target2_command_target2"
all2_target2_command_target2
echo "all2_target2_command_all2"
all2_target2_command_all2
>make all3
echo "all3_target3_force_command_all3"
all3_target3_force_command_all3
>make all4
echo "all4_target4_::_command_target4"
all4_target4_::_command_target4
echo "all4_target4_::_command_all4"
all4_target4_::_command_all4
>touch target{1,2,3,4}
>ls
>make all1
echo "all1_target1_.PHONY_command_target1"
all1_target1_.PHONY_command_target1
echo "all1_target1_.PHONY_command_all1"
all1_target1_.PHONY_command_all1
>make all2
echo "all2_target2_command_all2"
all2_target2_command_all2
>make all3
echo "all3_target3_force_command_all3"
all3_target3_force_command_all3
>make all4
echo "all4_target4_::_command_target4"
all4_target4_::_command_target4
echo "all4_target4_::_command_all4"
all4_target4_::_command_all4
-----------
以上测试在GNU Make 3.81 版本进行
- makefile中的伪目标,强制目标和双冒号规则
- makefile中的伪目标,强制目标和双冒号规则
- makefile中的伪目标,强制目标和双冒号规则
- makefile中的伪目标,强制目标和双冒号规则
- Makefile 目标 双冒号
- Makefile中的伪目标
- Makefile中的伪目标
- Makefile中的伪目标
- Makefile中的伪目标
- .PHONY makefile中的伪目标
- .PHONY makefile中的伪目标
- .PHONY makefile中的伪目标
- .PHONY makefile中的伪目标
- .PHONY makefile中的伪目标
- .PHONY makefile中的伪目标
- .PHONY makefile中的伪目标
- .PHONY makefile中的伪目标
- .PHONY------makefile中的伪目标
- 数学之美番外篇:快排为什么那样快
- MyBatis的基本使用
- ubuntu 下 codeblocks 的使用 各种技巧
- 在文本框中显示0-100,10行10列
- makefile双冒号规则
- makefile中的伪目标,强制目标和双冒号规则
- javascrpit中的继承
- IOS开发之NSDictionary里setValue:forKey与setObject:forKey、objectForKey与valueForKey的差异
- C# Oracle海量数据批量入库及更新
- Set Matrix Zeroes
- Android平台构架(虚拟手机环境模拟及相关应用连接设计)
- Leap Motion概述
- C#中的正则表达式
- Hadoop Streaming