Makefile与coqtop -R coqdir

时间:2012-03-20 03:03:36

标签: makefile coq ocamlbuild

我有一个makefile:

添加命令:coqtop -R coqdir我必须在计算机中提供物理路径,但此目录取决于用户目录。 (~/color/trunk/color/devel/gwen Devel and ~/color/trunk/color CoLoR)。

是否有其他方法可以在不给出物理路径的情况下调用和组合程序?

tmp/rainbow.native: tmp
coqtop -q -R ~/color/trunk/color/devel/gwen Devel -R ~/color/trunk/color CoLoR 
-batch -load-vernac-source extraction.v && 
(cd tmp && ocamlbuild -j 3 rainbow.native)

tmp:
    mkdir -p $@

2 个答案:

答案 0 :(得分:1)

这是$PATH环境变量的用途:您可以在其中添加要运行的程序的目录。基本上没有办法make或你的makefile可以在整个计算机上搜索coqtop程序,所以调用makefile的人必须知道它在哪里并通知makefile。

通常这是由知道程序所在位置的人完成的,在调用$PATH之前将包含该程序的目录添加到他们的make环境变量中。

如果您不想这样做,那么他们需要在make命令行上设置一个指向该位置的变量:make DEVEL=$HOME/color/trunk/color/devel或类似名称。或者他们可以在环境变量中设置路径(make总是将所有环境变量导入为makefile宏。)

作为另一种选择,您可以使用(假设您正在使用GNU make或支持它的make)-include local.mk然后让他们在其目录中创建一个文件local.mk来设置此变量在他们跑make之前;通过这种方式,他们可以使用正确的路径创建该文件一次并完成它。

这些是你唯一的选择,除非有某种方法你可以通过算法确定你想要的路径,例如,当前目录或包含makefile的目录(你似乎在说它没有'吨)。

答案 1 :(得分:0)

使用coq v8.4,您可以将环境变量COQPATH设置为冒号分隔的路径(可能在窗口上以分号分隔),coq会将这些目录视为传递{{1} }。换句话说,它将以递归方式添加所有文件,并带有空前缀。

此外,默认情况下,coq v8.4会以相同的方式自动处理-R <directory> ''(技术上~/.local/share/coq)。因此,您可以使用适当的名称(即${XDG_DATA_HOME}/coqDevel)链接相应的目录。