如何编译Coq文件与证明通用+;Emacs?

如何编译Coq文件与证明通用+;Emacs?,coq,Coq,现在,我从软件基金会开始,所有的东西都放在一个盘子里,我很难想出如何建立自己的项目。有很多,但由于我刚刚开始,我发现在尝试建立hello world程序时,这太复杂了。我还有其他一些问题 hello.v 我设法编译一个空的hello.v的方法是将上面的内容放入\u CoqProject文件中,然后运行 coq_makefile -o Makefile.coq -f _CoqProject 这使得makefile make -f Makefile.coq 这会编译项目,但我无法让makehe

现在,我从软件基金会开始,所有的东西都放在一个盘子里,我很难想出如何建立自己的项目。有很多,但由于我刚刚开始,我发现在尝试建立hello world程序时,这太复杂了。我还有其他一些问题

hello.v
我设法编译一个空的
hello.v
的方法是将上面的内容放入
\u CoqProject
文件中,然后运行

coq_makefile -o Makefile.coq -f _CoqProject
这使得makefile

make -f Makefile.coq
这会编译项目,但我无法让
makehello
仅使用它,而Proof General在编译单个文件时恰好使用了它

make hello.vo
make: *** No rule to make target 'hello.vo'.  Stop.
以上是我尝试从“证明一般”编译时得到的结果

我在这里该怎么办?用一个空文件设置一个项目,以便与Proof General+Emacs一起使用,最简单的方法是什么

-Q . VFA

此外,为什么SF vol 3在其
\u CoqProject
文件中没有太多内容的情况下仍然有效?它只有上述功能。

以下是传统设置的外观(它实际上不是标准化的,您会在野外发现变化,尤其是对于旧项目,以及现在支持Coq的
dune
未来项目):

使用以下
\u 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
# Add this line to Makefile to enable PG's "coq-Compile"
-include Makefile.coq
build
目标被标记为
.PHONY
,表示它不打算创建文件/目录。这避免了其他工具出于任何原因创建
build
目录时出现问题

命令行 要从命令行生成整个项目,请键入
make
(默认情况下相当于
makebuild
,因为
build
Makefile
的第一个命令)。
要仅构建一个
.vo
文件,例如
理论/hello.vo
,请键入
make-f Makefile.coq理论/hello.vo
。它必须列在
\u CoqProject
中(以便
coq\u makefile
然后将其放入
makefile.coq.conf

一般证明 一般来说,有一个选项“在需要之前编译”,它的名字是这么说的。(Coq>自动编译>需要前编译)

鉴于当前缺乏可配置性,您似乎一直在使用的
coq Compile
命令似乎已被放弃
coq Compile
调用
make hello.vo
,但是
Makefile
中没有
hello.vo
目标,除非设置了
-f
选项,否则它是
make
默认查看的目标。使此PG命令与该设置一起工作的一种方法是将生成的
Makefile.coq
包含在
Makefile
中:

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

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

.PHONY: build
# Add this line to Makefile to enable PG's "coq-Compile"
-include Makefile.coq
我个人对此犹豫不决,因为我不太理解
Makefile.coq
中的内容


此外,为什么SF第3卷在其项目文件中没有太多内容的情况下仍然有效?它只有上面提到的

所有SF卷现在都是这样工作的。对于使用Proof-General/CoqIDE的交互式编辑,只有
-Q
选项(实际上,
-R
和其他一些选项)重要,而不是文件名。文件名由
coq\u makefile
使用,但您也可以更改
coq\u makefile
的调用以从其他地方获取文件名,例如作为直接命令行参数:

# If _CoqProject only contains the -Q option
coq_makefile -f _CoqProject theories/hello.v

你所说的“根据证据汇编”是什么意思?“校对常规”是一种emacs编辑模式。你不是从证据中打电话给make将军。。。或者?当将PG与Coq文件一起使用时,Emacs中有一个
Coq->Coq PROG(ARGS)->Compile
按钮。根据我的实验,我不相信
-包含Makefile.Coq
足以启用PG功能。或者VFA
Makefile
是由
coq\u Makefile-f\u CoqProject-o Makefile
生成的。如果查看VFA
Makefile
,您将看到它显式地包含了像
Perm.v
这样的文件。将其与从目录的
\u CoqProject
生成的文件进行比较,很明显它们是不同的。这里是否缺少一些编译选项?我想他们可以一直手工输入文件,但我发现这不太可能。SoftwareFoundation中的
Makefile
并不能真正代表Coq项目的打包方式,但您可以看到
Makefile
target的
Makefile.conf
中使用的完整命令(如果我使用coq 8.8运行
coq_makefile
,我会得到几乎相同的文件,除了微小的环境差异)。额外的选项基本上是不相关的,但您可以看到Coq文件直接列在命令行上。在到达这里之前,它们只是列在Software Foundation的配置中的其他位置。据我所知,
-include Makefile.Coq
只要生成了
Makefile.Coq
,就足够了。我的pr太多了在评论中要处理的问题,那么我们移动一下如何?