现在,我正在从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
文件中没有太多内容,为什么还能工作?它只有上面的内容。
答案 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
,因为build
是Makefile
的第一个命令)。
要仅生成一个.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
中没有目标Makefile
,make
是默认情况下要查看的目标,除非{{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