我有一个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 $@
答案 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}/coq
和Devel
)链接相应的目录。