使用 entr 运行 时 Make 未完成

Make doesn't finish when run with entr

我正在尝试使用 entr 在我使用以下命令更改 C 文件后立即重新编译:

$ echo ex8.c | entr make ex8 && ./ex8

当我 运行 它时,我得到了 cc 输出,但是没有任何反应

$ echo ex8.c | entr make ex8 && ./ex8
cc -Wall -g    ex8.c   -o ex8

如果我只是手动编写它,效果会很好

$ make ex8 && ./ex8

我应该如何用 entr 编写它才能工作?

手册页不够详细,但我安装并尝试了它。请注意,您的命令实际上是三个不同的 shell 命令:echo ex8.centr make ex8./ex8。它们通过管道(前两个)和 && 运算符(最后两个)连接。管道中的两个命令都是并行启动的。在管道完成之前不会调用最终命令,然后如果退出代码成功,则为 运行.

这意味着最终命令 ./ex8 将在 entr make ex8 命令完成后才会启动。但是,entr 在它 运行s make 一次后不会退出:它的全部目的是继续观察源文件和 运行 make 每次更改。这就是为什么永远不会调用最终命令的原因:entr 永远不会退出。

有多种方法可以解决这个问题,但最简单的方法是在您的 makefile 中添加一条规则,该规则将构建 AND 运行 命令,然后使用制作;将此添加到您的 makefile 中:

.PHONY: run-ex8
run-ex8: ex8
        ./$<

现在像这样使用 entr

echo ex8.c | entr make run-ex8