曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4465|回复: 0
打印 上一主题 下一主题

+/- 符号

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2011-6-30 16:23:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
make 通常会在命令运行结束后检查命令的执行的返回状态,如果返回成功,那么就启动一个子 shell 来执行下一条命令;如果在中途检测到有执行出错的情况(返回非 0 状态),那么就会放弃对当前规则后续命令的执行,甚至会终止所有规则的执行。但在某些情况下,规则中一个命令执行失败并不代表整个规则执行错误,所以完全可以忽略这条可能执行失败的命令,其忽略的方法是在命令前添加一个 '-' 符号。在 Makefile 经常看到在 include 面前添加 '-' 符号:-include ,这时当当 include 包含的文件不存在时也不会造成整个 Makefile 解析的终止。又如,当一条 rm 命令前添加 ‘-’ 符号时,如果要删除的文件不存在或删除文件失败也不会对整个流程有任何影响。

除了 '-' 符号外,还可以看到 '+' 符号,它的意思和 '-' 相反,表示不忽略。这就意味着,像 make 的命令行选项 -n(--just print), -t(touch) 并不影响之前带 '+' 符号的命令的执行。像 -n 选项,一般情况下,它只是在解析命令,而不真正执行它们,但是命令前使用了 '+' 就后 -n 选项就不能阻止命令被执行。如一个目录下有这几个文件:
$ ls
Makefile  test2.txt  test.txt
Makefile 的内容为:
[code=Makefile]all:
    @rm -f  test.txt
    +@rm -f test2.txt[/mw_shl_code]
使用 -n 选项来运行 make:
$ make -n
rm -f  test.txt
rm -f test2.txt
再检查一下当前目录:
$ ls
Makefile  test.txt
可见 test2.txt 已经被删除。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 06:40 , Processed in 0.150413 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表