【发布时间】:2015-05-01 17:19:32
【问题描述】:
makefile 中的@[arguments] 语法是什么意思?例如,我遇到了一个包含以下内容的 makefile:
all: $(EXEC_NAME)
@[ -p video_fifo ] || mkfifo video_fifo
这是做什么的?
【问题讨论】:
标签: makefile
makefile 中的@[arguments] 语法是什么意思?例如,我遇到了一个包含以下内容的 makefile:
all: $(EXEC_NAME)
@[ -p video_fifo ] || mkfifo video_fifo
这是做什么的?
【问题讨论】:
标签: makefile
什么都没有。你解析不正确。
前导的@ 用于制作。它的意思是“使这个命令静音”。请参阅 GNU make 手册中的 Recipe Echoing。
该行的其余部分是一个 shell 脚本。在这种情况下,它从测试[ -p video_fifo ] 开始(您经常在if 语句if [ -n "$var" ] 的上下文中看到这一点,或者在the bash manual 中看到更多关于[/test 和-p 的信息如果[ 测试返回false(因此|| OR 运算符),则|| mkfifo video_fifo 创建video_fifo fifo。
【讨论】:
video_fifo 是先进先出,那么[ -p video_fifo ] 返回true 并且行结束(||/OR 短路并完成)。如果它不存在或不是先进先出,则测试返回 false 并运行 || 的右侧以创建先进先出(我想如果存在其他一些非先进先出文件,这将失败但这可能不太可能)。