4

按照如何在 Frege 中使用多个内联断言的答案,我学习了如何编译两个 Frege 模块 A 和 B,其中 B 依赖于 A:你必须编译 B。如果给定 -make 选项,编译器会发现 B 依赖于在 A 上,将在源路径(-sp 标志)上找到 A,然后先编译 A,然后编译 B。

但是,我不能只将我关心的所有文件都交给编译器。将 AB 都提供给编译器失败,对我来说出现“循环依赖”错误。而且我还发现无法为编译器提供目录(它什么也没做)。

看起来我必须知道依赖图的根才能正确编译所有需要编译的文件。但

  • 我可能不知道根源。
  • 可能有很多。
  • 以这种方式进行适当的构建自动化非常困难。

是否有编译器选项的组合,我可以让编译器编译源树中的所有文件?

4

2 回答 2

2

这个问题现在已经被 frege-maven-plugin 解决了:

https://github.com/Frege/frege-maven-plugin

这在 Maven 中心可用。

于 2013-09-24T15:48:41.843 回答
2

编辑:使用更新的编译器版本,您确实可以编译整个树:

java -jar fregec.jar -d classes/ -make directory1/ directory2/

到目前为止,下面的答案已经过时了。


最简洁的答案是不”。

长答案:

  1. 如果你有一个应用程序,你应该知道根源,它是包含 main函数的模块。只要它们不相互依赖,就可以使用 -make 选项一次编译所有这些。
  2. 如果是库,您可以创建一个伪模块,它只导入属于该库的所有模块并编译该模块。
  3. 如果以上都没有帮助,并且您只需要编译“所有内容”,您可以通过使用 -make 选项传递所有文件名来完成(见下文)。缺点是某些文件可能会被编译两次。
  4. eclipse 插件的 Frege 构建器会完整构建中以正确的顺序编译所有文件。

命令行编译器似乎也需要这样的功能。

顺便说一句,我无法追溯您的“循环依赖”错误。我使用了以下命令:

java -jar ~/frege/fregec.jar  -d bin -make -sp Real_World_Frege-master/ $(find . -type f -name '*.fr' -print)

事实上,只有在 A 导入 B 而 B(或 B 导入的东西)导入 A 的情况下,才应标记此错误。

于 2013-09-15T18:17:06.477 回答