我发现在以下情况下文件不会被编译erl -make
。
- 编译文件
a.erl
a.erl
从其他目录复制旧版本- 编译文件
a.erl
a.erl
未编译
然后我在OS X上测试,a.erl
编译成功。
在上述两种情况下,唯一的区别是 OS X 中的“上次修改时间”在我使用cp
命令复制文件时发生了更改,而在 Windows 中没有更改则没有命令。
我发现在以下情况下文件不会被编译erl -make
。
a.erl
a.erl
从其他目录复制旧版本a.erl
a.erl
未编译然后我在OS X上测试,a.erl
编译成功。
在上述两种情况下,唯一的区别是 OS X 中的“上次修改时间”在我使用cp
命令复制文件时发生了更改,而在 Windows 中没有更改则没有命令。
听起来你已经想通了:当源文件比编译后的文件更新时会触发重新编译。您的 Windows shell 会保留修改时间,因此我们不会重新编译。Mac OS 终端 shell (bash) 会更新修改时间,因此旧文件看起来很新。
这是 make(3) 手册页的相关部分:
Traversing the set of modules, it then recompiles every module for which at least one of the following conditions apply: * there is no object file, or * the source file has been modified since it was last com- piled, or, * an include file has been modified since the source file was last compiled. As a side effect, the function prints the name of each module it tries to compile. If compilation fails for a module, the make procedure stops and error is returned.
在 Windows 下,最好的办法是在要强制重新编译时删除已编译的模块。您可能还会有更好的时间使用一些源代码控制(SVN、Git 等)。我相信他们会更新恢复文件的修改时间,即使在 Windows 下也是如此。