如何使用Proof General + Emacs编译Coq文件?

时间:2019-08-18 15:07:51

标签: coq

现在,我正在从Software Foundations继续前进,那里的所有东西都放在盘子上,我很难弄清楚如何设置自己的项目。这里有some instructions,但是由于我刚入门,所以在尝试建立hello world程序时发现它太复杂了。另外我还有其他问题。

hello.v

我设法编译空hello.v的方法是将以上内容放入_CoqProject文件中,然后运行...

coq_makefile -o Makefile.coq -f _CoqProject

这将生成makefile。

make -f Makefile.coq

这将编译项目,但我无法让make hello与此一起工作,而Proof General在编译单个文件时恰好使用了此。

make hello.vo
make: *** No rule to make target 'hello.vo'.  Stop.

以上是我尝试从Proof General进行编译时得到的结果。

我应该在这里做什么?用Proof General + Emacs使用空文件来设置项目的最简单方法是什么?

-Q . VFA

此外,尽管SF vol 3的_CoqProject文件中没有太多内容,为什么还能工作?它只有上面的内容。

1 个答案:

答案 0 :(得分:3)

这是常规设置的样子(实际上并没有标准化,您会发现各种变化,尤其是对于旧项目以及dune现在支持Coq的未来项目):

_CoqProject
Makefile
theories/
  hello.v

使用以下_CoqProject

-Q theories/ MyProject
theories/hello.v
# list paths to .v files here

特别是,对项目(-Q path/ ProjectName进行限定可以避免歧义(如果在其他位置使用了相同的模块名称),并且可以更轻松地从以后的其他项目中导入。

以及以下Makefile

build: Makefile.coq
    $(MAKE) -f Makefile.coq

Makefile.coq: _CoqProject
    coq_makefile -f _CoqProject -o Makefile.coq

.PHONY: build

build目标被标记为.PHONY,以指示它并非旨在创建文件/目录。这样可以避免其他工具出于任何原因创建build目录时出现问题。

命令行

要从命令行构建整个项目,请键入make(默认情况下等效于make build,因为buildMakefile的第一个命令)。
要仅生成一个.vo文件,例如theories/hello.vo,请键入make -f Makefile.coq theories/hello.vo。它必须在_CoqProject中列出(以便coq_makefile然后将其放入Makefile.coq.conf中)。

一般证明

在Proof General中,有一个选项“需要之前编译”,其作用如其名称所示。 (Coq>自动编译>需要之前编译)

由于当前缺乏可配置性,您似乎一直在使用的coq-Compile命令似乎已被放弃。 coq-Compile调用make hello.vo,但是hello.vo中没有目标Makefilemake是默认情况下要查看的目标,除非{{1} }选项已设置。使该PG命令与此设置配合使用的一种方法是将生成的-f包含在Makefile.coq中:

Makefile

我个人不愿意这样做,因为我不太了解# Add this line to Makefile to enable PG's "coq-Compile" -include Makefile.coq 中的内容。


  

而且,尽管SF Vol 3的_CoqProject文件中没有太多内容,但为什么仍能正常工作?它只有上面的内容。

所有SF卷现在都以这种方式工作。对于使用Proof General / CoqIDE进行交互式编辑,仅Makefile.coq选项很重要(实际上,-Q和其他几个选项也很重要),而文件名无关紧要。文件名由-R使用,但是您也可以更改对coq_makefile的调用,以从其他位置获取文件名,例如,作为直接命令行参数:

coq_makefile