makefile中的伪目标,强制目标和双冒号规则

----伪目标----

target

commands

如果makefile 所在目录没有target 同名文件:make target 则导致commands 总是被执行。

如果makefile 所在目录下存在target 同名文件:make targetcommands 不被执行,认为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

 

14make all 执行情况相同,无论makefile 所在目录下存不存在与target 同名文件,commands1commands 都被执行。

23make all 执行情况在makefile 所在目录下存在与target 同名文件,commads 不被执行( 认为target 目标是最新的)commands1 将被执行;而如果不存在与target 同名的文件,则2 运行效果与14 相同,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 版本进行

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值