我在使用以下命令更改C文件时尝试使用entr重新编译:
$ 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
我应该如何用它来写它才能工作?
答案 0 :(得分:0)
该手册页不够详细,但我安装并尝试了。请注意,您的命令实际上是三个不同的shell命令:echo ex8.c
,entr make ex8
和./ex8
。它们通过管道(前两个)和&&
运算符(最后两个)连接。管道中的两个命令都是并行启动的。在管道完成之前不会调用最终命令,如果退出代码成功则运行它。
这意味着在./ex8
命令完成之后才会启动最终命令entr make ex8
。但是,entr
在运行一次之后不会退出:它的全部内容是继续观察源文件并在每次更改时运行make。这就是永远不会调用最终命令的原因:entr
永不退出。
有多种方法可以解决这个问题,但最简单的方法是在makefile中添加一条规则来构建 AND RUN 命令,然后用make调用它;将其添加到您的makefile:
.PHONY: run-ex8
run-ex8: ex8
./$<
现在像这样使用entr
:
echo ex8.c | entr make run-ex8