- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读 make
手册,最后我读到了这一段:
Here is how we could write a make rule for cleaning our example editor:
clean:
rm edit $(objects)In practice, we might want to write the rule in a somewhat more complicated manner to handle unanticipated situations. We would do this:
.PHONY : clean clean :
-rm edit $(objects)This prevents make from getting confused by an actual file called clean and causes it to continue in spite of errors from rm. (See Phony Targets, and Errors in Recipes.)
我知道 clean
目标不引用文件系统上的文件,但是如果我省略目标上的 .PHONY
声明,make 会如何混淆声明为 .PHONY
?
我会看到一个混淆 make
命令的示例。
P.S.:rm
命令前的负号代表什么?
谢谢。
最佳答案
让我们测试一下。启动您选择的终端,导航到您选择的目录,然后创建一个新目录(用于保存测试文件)。我选择了so-27204300
:
$ mkdir so-27204300
$ cd so-27204300
现在创建一个没有 .PHONY 注释的简单 Makefile
。我只会显示内容:
clean:
echo "Clean is executing"
执行make
命令,你应该得到如下输出:
$ make
echo "Clean is executing"
Clean is executing
现在,创建一个clean
文件(touch clean
)并再次执行make
。你会得到
$ make
make: `clean' is up to date.
因为有一个文件clean
比目标clean
的输出更新。将 .PHONY clean
添加到 Makefile
以便它读取
.PHONY: clean
clean:
echo "Clean is executing"
现在,即使您的目录中有文件 clean
,make
也会执行目标
$ make
echo "Clean is executing"
Clean is executing
关于您的 PS:更改此 Makefile
使其显示为:
.PHONY: clean
clean:
rm test
echo "Done"
如您所见,那里没有 -
,而且当前目录中也没有 test
文件。运行 make
会给你
$ make
rm test
rm: cannot remove ‘test’: No such file or directory
make: *** [clean] Error 1
echo
没有输出。如果 clean
目标是另一个目标的先决条件,那么由于这个错误,另一个目标也不会被构建。
添加 -
以便 Makefile
读取:
.PHONY: clean
clean:
-rm test
echo "Done"
解决这个问题:
$ make
rm test
rm: cannot remove ‘test’: No such file or directory
make: [clean] Error 1 (ignored)
echo "Done"
Done
对于 rm
,您还可以使用 -f
让它停止提示错误。但是还有其他命令没有错误参数消音器。
如果你想隐藏正在执行的命令的打印,你可以使用@
而不是-
。
关于makefile - 如果没有 .PHONY 目标,怎么会让人感到困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27204300/
我仍然不明白为什么 Makefile 中的“虚假”规则将“.PHONY”作为其目标。作为先决条件,这会更合乎逻辑。 我需要详细说明这一点吗?如果A依赖于B并且B是假的,那么A也是假的。因此,与 .PH
这个问题在这里已经有了答案: What is the purpose of .PHONY in a Makefile? (9 个回答) 关闭 7 年前。 我正在使用生成文件来运行测试。我不确定 .P
考虑一个长 makefile目标众多,都是 PHONY (意味着目标名称不代表现有文件)。 我可以这样做: .PHONY: a a: do someting a .PHONY: b b:
我有一个复杂的 makefile,似乎每次调用它时都会重新链接我的库和可执行文件。我能够将问题缩小到一个简单的 makefile: 1: all: prog 2: 3: .PHONY: prog
我有一个复杂的 makefile,似乎每次调用它时都会重新链接我的库和可执行文件。我能够将问题缩小到一个简单的 makefile: 1: all: prog 2: 3: .PHONY: prog
我有以下递归 makefile: .PHONY: all clean %.subdir: $(MAKE) -C src $* $(MAKE) -C dict $* all: all.s
我有使用 .Phony 的 Makefile,它工作正常 我的问题是有更简洁的方式来编写它而不是在每个目标之前 all: app1 app2 .PHONY: app1 app1: echo "
我正在阅读 make 手册,最后我读到了这一段: Here is how we could write a make rule for cleaning our example editor: cle
在 makefile 中搜索 .PHONY 的用法时,我遇到了 this上面写着类似 .PHONY also allows you to have targets that do not have a
Makefile 中的 .PHONY 是什么意思?我已经经历过this ,但是太复杂了。 有人可以简单地向我解释一下吗? 最佳答案 默认情况下,Makefile 目标是“文件目标” - 它们用于从其他
docs提供: '.EXPORT_ALL_VARIABLES' Simply by being mentioned as a target, this tells 'make' to export a
我已经摸索了大约一个小时了,事实证明 Google 的用途有限。我有一个包含图表的报告的 Makefile。这些图表由 graphs/目录中的 .plot 文件表示,gnuplot 用于从它们生成 .
我有一个Makefile,其中没有目标引用文件,所以如果这可以在某个循环中完成,那就是方便。 是否有某种方法可以将 makefile 中的每个目标设置为 .PHONY ? 我问这个问题的原因是我不想让
我有一个大.PHONY命令: .PHONY: clean cleanall 我可以将其分成多个部分,如下所示吗? .PHONY: clean clean: rm -rf build/ .PHO
我正在将 Makefile 转换为 Shakefile,但我不确定如何处理 PHONY make 目标(clean、install 等)。 )。我尝试过类似的事情: main = shake shak
有人可以阐明这里的区别吗: $(tsdir)/proj 具有先决条件 $(tsdir)/proja 和 $(tsdir)/projb。我希望每次必须构建 proj 时调用 proja 和 projb
一个 makefile 有一个假目标 libs,还有一个要进入的目录 libs。在一台机器上运行良好,而在另一台机器上它不会进入 libs 目标的 libs 目录。在这两种情况下,gnu make 版
我正在尝试让一些依赖安装目标在我的 Makefile 中工作,如下所示: .PHONY: install-everything install-part1 install-part2 install-
我知道 .PHONY 的作用。 如果在我的 Makefile 所在的文件夹中,我添加了一个名为 clean 的空文件,并且在我运行 make clean 之后所有的 clean 目标都不会被执行,因为
.PHONY: b c: a @touch c @echo "Changed" a: b b: @date +%s > a 使用示例 make 文件运行 make 会导致在第一
我是一名优秀的程序员,十分优秀!