程序重新运行,例如,文件被修改时的`make`?

时间:2010-12-07 19:01:00

标签: makefile

是否有一个程序会在修改文件时自动重新运行,例如make

例如,当我编写sphinx文档时,如果每次编辑任何相关文件时都自动运行make html,那就太好了。

7 个答案:

答案 0 :(得分:8)

对于简单的事情,重新运行可能非常合适:http://pypi.python.org/pypi/rerun

"每当在当前目录或其子目录中修改文件时重命令运行给定命令的命令行可执行Python脚本。"

它需要一个Python解释器,但不关心你的命令是用Python编写的。

Usage

rerun [--help|-h] [--verbose|-v] [--ignore|-i=<file>] [--version] <command>
Where:

<command>           Command to execute
--help|-h           Show this help message and exit.
--ignore|-i=<file>  File or directory to ignore. Any directories of the
                    given name (and their subdirs) are excluded from the
                    search for changed files. Any modification to files of
                    the given name are ignored. The given value is
                    compared to basenames, so for example, "--ignore=def"
                    will skip the contents of directory "./abc/def/" and
                    will ignore file "./ghi/def". Can be specified multiple
                    times.
--verbose|-v        Display the names of changed files before the command
                    output.
--version           Show version number and exit.

答案 1 :(得分:4)

在Linux中,您可以使用以下命令行:

while true; do inotifywait -e close_write  *.py; make; done

使用标准系统命令inotifywait,如果不可用,请安装以下内容:

sudo apt install inotify-tools

答案 2 :(得分:3)

好吧,因为如果没有任何改变,make将不会做任何事情,那么

while true; do sleep 60; make html; done

或你选择的shell中的等价物?我不认为通常的文件系统层是事件驱动的,它们会让你通知你文件的变化,而不会自己做类似的事情,但是DBUS可能会做那种事情。

答案 3 :(得分:2)

您可以在循环中使用inotifywait:https://github.com/rvoicilas/inotify-tools/wiki/#info

答案 4 :(得分:1)

答案 5 :(得分:1)

根据答案https://stackoverflow.com/a/22907316/71522 <s:element1></s:element1> <s:element2></s:element2> 似乎效果很好:

watchman

每次 $ watchman-make -p '*.c' 'Makefile' -t all make all文件更改时,都会重新运行*.c

可以安装:

Makefile

答案 6 :(得分:0)

此问题也在这里提出:https://superuser.com/questions/181517/how-to-execute-a-command-whenever-a-file-changes/

您可以尝试reflex

# Rerun make whenever a .c file changes
reflex -r '\.c$' make