如果您在一个支持的平台上inotifywait
(据我所知,只有 Linux;但由于您询问了 Make,看来您很有可能在 Linux 上;对于 OS X,请参阅此问题),您可以执行以下操作:
inotifywait --exclude '.*\.swp|.*\.o|.*~' --event MODIFY -q -m -r . |
while read
do make
done
打破它:
inotifywait
监听文件系统事件。
--exclude '.*\.swp|.*\.o|.*~'
.swp
排除以,.o
或结尾的文件~
(您可能希望添加到此列表中)。
--event MODIFY
当您找到一个打印出事件发生的文件的文件路径时。
-q
不要打印启动消息(因此不会过早调用 make)。
-m
连续聆听。
-r .
递归监听当前目录。然后它被输送到一个简单的循环中,该循环为读取的每一行调用 make。
根据您的需求量身定制。您可能会发现inotifywait --help
联机帮助页很有帮助。
这是一个更详细的脚本。我没有对其进行太多测试,因此请谨慎使用。它旨在防止构建一次又一次不必要地发生,例如在 Git 中切换分支时。
#!/bin/sh
datestampFormat="%Y%m%d%H%M%S"
lastrun=$(date +$datestampFormat)
inotifywait --exclude '.*\.swp|.*\.o|.*~' \
--event MODIFY \
--timefmt $datestampFormat \
--format %T \
-q -m -r . |
while read modified; do
if [ $modified -gt $lastrun ]; then
make
lastrun=$(date +$datestampFormat)
fi
done