and*_*fff 2 c++ filesystems makefile build guard
我最近在终端窗口中使用nodemon被破坏,每当我保存更改时运行我的Node.js程序.
我想用我的一些C++代码做类似的事情.我的实际项目有很多源文件,但如果我们假设下面的例子,我想make
在保存更改时自动运行sample.dat
,program.c
或者header.h
.
test: program sample.dat
./program < sample.dat
program: program.c header.h
gcc program.c -o program
Run Code Online (Sandbox Code Playgroud)
是否有现成的解决方案?
(不启动IDE.我知道很多IDE可以在更改文件时进行项目重建.)
如果你在一个支持的平台上inotifywait
(据我所知,只有Linux;但是既然你问过Make,看来你很有可能在Linux上;对于OS X,请看这个问题),你可以这样做:
inotifywait --exclude '.*\.swp|.*\.o|.*~' --event MODIFY -q -m -r . |
while read
do make
done
Run Code Online (Sandbox Code Playgroud)
打破这种情况:
inotifywait
Run Code Online (Sandbox Code Playgroud)
侦听文件系统事件.
--exclude '.*\.swp|.*\.o|.*~'
Run Code Online (Sandbox Code Playgroud)
排除结尾的文件.swp
,.o
或者~
(您可能希望添加到此列表中).
--event MODIFY
Run Code Online (Sandbox Code Playgroud)
当您找到一个打印出事件发生的文件的文件路径时.
-q
Run Code Online (Sandbox Code Playgroud)
不要打印启动消息(因此不会过早地调用make).
-m
Run Code Online (Sandbox Code Playgroud)
不断听.
-r .
Run Code Online (Sandbox Code Playgroud)
在当前目录上递归监听.然后它被传送到一个简单的循环,它为每一行读取调用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
Run Code Online (Sandbox Code Playgroud)