1

我发现在以下情况下文件不会被编译erl -make

  1. 编译文件a.erl
  2. a.erl从其他目录复制旧版本
  3. 编译文件a.erl
  4. a.erl未编译

然后我在OS X上测试,a.erl编译成功。

在上述两种情况下,唯一的区别是 OS X 中的“上次修改时间”在我使用cp命令复制文件时发生了更改,而在 Windows 中没有更改则没有命令。

4

1 回答 1

2

听起来你已经想通了:当源文件比编译后的文件更新时会触发重新编译。您的 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 下也是如此。

于 2013-08-21T20:45:02.047 回答