makefile调试

一。以下可在任何位置执行,因为都是符合gnu make语法的:

$(warning text...)      继续执行,  这个可用来检查make是否走到了这里

$(error text...)          退出,这个可用来检查make是否走到了这里



 

二。以下要在recipe区域才可执行,因为都是shell命令:

read     等待从键盘输入任意值才继续执行

echo     在屏幕上输出信息

 

make 的执行顺序是先执行prerequisite,再执行recipe
很多target的recipe是空的。主要目地就是为了执行prerequisite
分析下面的Makefile,可以加深对上述说法的理解。

Makefile语言Makefile01 sandwich := droid
02 $(sandwich):
03 
04 ifeq ($(.DEFAULT_GOAL),)
05 $(warning no default goal is set)
06 else
07 $(warning default goal is $(.DEFAULT_GOAL))
08 endif
09 ifeq (0,1)
10 else
11 .PHONY: bar
12 bar: 
13     @echo "in bar"
14 ifeq ($(.DEFAULT_GOAL),)
15 $(warning no default goal is set)
16 else
17 $(warning default goal is $(.DEFAULT_GOAL))
18 endif
19 .PHONY: dist_libraries
20 dist_libraries:
21     @echo "in dist_libraries"
22 .PHONY: droidcore
23 droidcore: droidcore-2
24     @echo "in droidcore"
25 droid: droidcore dist_libraries
26     $(warning in 1st line)
27     $(warning in 2nd line)
28     @echo $(shell pwd)
29     date
30     @echo "in droid"
31 
32     $(warning after droid 1)
33 $(warning after droid 2)
34 .PHONY: clean
35 clean:
36     @echo "in clean"
37 .PHONY:droidcore-4
38 .PHONY:droidcore-3
39 droidcore-4:
40     @echo "in droidcore-4"
41 droidcore-3:droidcore-4
42     @echo "in droidcore-3"
43 .PHONY: clobber
44 clobber: clean
45     @echo "in clobber"
46 endif
47 
48 .PHONY: showcommands
49 showcommands:
50     @echo >/dev/null
51 
52 
53 .PHONY:droidcore-2
54 droidcore-2:droidcore-3
55     @echo "in droidcore-2"

 

 

make执行后的结果是:

$ make

Makefile:7: default goal is droid

Makefile:17: default goal is droid

Makefile:33: after droid 2

in droidcore-4

in droidcore-3

in droidcore-2

in droidcore

in dist_libraries

Makefile:26: in 1st line

Makefile:26: in 2nd line

Makefile:26: after droid 1

/home/android/Documents/test

date

Mon Nov 28 11:50:00 CST 2011

in droid

 

但如果把makefile改为如下:
Makefile语言Codee#24288

01 sandwich := droid
02 #$(sandwich):
03 
04 ifeq ($(.DEFAULT_GOAL),)
05 $(warning no default goal is set)
06 else
07 $(warning default goal is $(.DEFAULT_GOAL))
08 endif
09 ifeq (0,1)
10 else
11 .PHONY: bar
12 bar: 
13     @echo "in bar"
14 ifeq ($(.DEFAULT_GOAL),)
15 $(warning no default goal is set)
16 else
17 $(warning default goal is $(.DEFAULT_GOAL))
18 endif
19 .PHONY: dist_libraries
20 dist_libraries:
21     @echo "in dist_libraries"
22 .PHONY: droidcore
23 droidcore: droidcore-2
24     @echo "in droidcore"
25 droid: droidcore dist_libraries
26     $(warning in 1st line)
27     $(warning in 2nd line)
28     @echo $(shell pwd)
29     date
30     @echo "in droid"
31 
32     $(warning after droid 1)
33 $(warning after droid 2)
34 .PHONY: clean
35 clean:
36     @echo "in clean"
37 .PHONY:droidcore-4
38 .PHONY:droidcore-3
39 droidcore-4:
40     @echo "in droidcore-4"
41 droidcore-3:droidcore-4
42     @echo "in droidcore-3"
43 .PHONY: clobber
44 clobber: clean
45     @echo "in clobber"
46 endif
47 
48 .PHONY: showcommands
49 showcommands:
50     @echo >/dev/null
51 
52 
53 .PHONY:droidcore-2
54 droidcore-2:droidcore-3
55     @echo "in droidcore-2"

 

则输出如下内容:

$ make

Makefile:5: no default goal is set

Makefile:17: default goal is bar

Makefile:33: after droid 2

in bar


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值