为什么coqide中的“make”和“using”CoqProject与命令行中的“coqc”不同?
我有两个简短的文件:cc_测试由 引理cc:4=4。证明。自动的。Qed. libtest由为什么coqide中的“make”和“using”CoqProject与命令行中的“coqc”不同?,coq,coqide,Coq,Coqide,我有两个简短的文件:cc_测试由 引理cc:4=4。证明。自动的。Qed. libtest由 需要导入cc\u测试。检查抄送。 当我执行 coqc-R。ClosureLib-顶级ClosureLib cc_测试 在目录“/home/barry/svn/Coq/Closure\u calculation”中 及 coqc-R”/home/barry/svn/Coq/ClosureLib-libtest 在它的目录中,我得到了预期的输出 cc:4=4 但是,当上面coqc的参数(从-R到结尾)放在_
需要导入cc\u测试。检查抄送。
当我执行
coqc-R。ClosureLib-顶级ClosureLib cc_测试
在目录“/home/barry/svn/Coq/Closure\u calculation”中
及
coqc-R”/home/barry/svn/Coq/ClosureLib-libtest
在它的目录中,我得到了预期的输出
cc:4=4
但是,当上面coqc的参数(从-R到结尾)放在_CoqProject文件中时,我调用makefile
,然后从coqide菜单调用Make
,cc_测试可以,但libtest会产生输出
文件“/libtest.v”,第1行,15-22个字符:
错误:无法找到库cc_测试。
如何修改项目文件以使其正常工作
注释:coq参考手册(第15章)未提及这些方法之间的任何差异。此外,参数“-top ClosureLib”
在命令行方法中似乎是必要的,但使用make
似乎无关紧要,因为在其他实验中,我经常收到错误消息,说它找到了Top.foo,但没有找到ClosureLib.foo。首先,我不认为-Top ClosureLib
在这里有用。将-top
描述为
对于coqc无效,因为顶级模块名称是从
输出文件的名称
至于你的主要问题,我必须承认我的解决方案是使用
coq_makefile -f _CoqProject -o Makefile
make
make install
make install
将库放入user contrib
中,在该位置将自动加载库。然后可以直接使用Require
编辑:
多亏了@Zimm48,我明白了如何使用$COQPATH
来完成相同的任务,而不必先安装依赖项。但是文件夹的名称将用作逻辑前缀,因此您必须在-R
或-Q
参数和目录名称中使用相同的标识符
我建议使用以下体系结构:
- 在目录
/home/barry/svn/Coq/ClosureLib
(注意,我重命名了目录,使其名称与传递给-R
的标识符相同),\u CoqProject
包含
-R . ClosureLib
cc_test.v
-R . MyLib
libtest.v
您可以编译cc_test.v,如下所示:
coq_makefile -f _CoqProject -o Makefile
make
coq_makefile -f _CoqProject -o Makefile
COQPATH=/home/barry/svn/Coq make
- 在包含
libtest.v
的目录中,\u CoqProject
包含
-R . ClosureLib
cc_test.v
-R . MyLib
libtest.v
您可以编译libtest.v
,如下所示:
coq_makefile -f _CoqProject -o Makefile
make
coq_makefile -f _CoqProject -o Makefile
COQPATH=/home/barry/svn/Coq make
如果我读对了问题,这里没有“依赖性”,即两个文件都应该是同一个逻辑和物理目录的一部分。这在问题中并不清楚。用户指定了一个绝对路径这一事实让我假设有两个不同的文件夹,但我可能误解了这个问题。你试过Coq 8.7吗?CoqIDE Make功能用于不关心\u CoqProject
文件。这是固定的。