【发布时间】:2021-02-15 21:19:09
【问题描述】:
问题:我有一个用 Haskell 编写的命令行工具,可以读取数据文件。安装程序后,我希望程序能够读取该数据文件,而不管我发现自己所在的目录。也就是说,在安装时,程序知道的路径应该与安装程序的路径对齐选择。
最初的尝试:我被引导到 Cabal(库)中的 7.6. Accessing data files from package code 部分,并了解到我可以从 Paths_myprog 导入 getDataDir :: IO FilePath,只要我将 Paths_myprog 添加到 other-modules(虽然 @默认情况下为 987654322@),并且在安装我的程序后,我可以运行它:
myprog_datadir=~/tmp ~/.local/bin/myprog
然后我需要做的就是让安装程序将数据文件移动到这个目录,因为myprog 动态访问那个路径而不是一些硬编码的值。但是我不想每次运行程序时都在我的环境中指定myprog_datadir=~/tmp,我希望它硬编码到二进制文件中!而且似乎在构建和安装时设置myprog_datadir=~/tmp 并没有设置编译时默认值。
那么:有没有办法可以在安装时硬编码这个路径?
(最好是与 Stack 相关的答案,但也非常感谢 cabal-install 的答案。)
【问题讨论】:
-
该文件被列为
data-files: relative/path/to/file.txt,但当我安装可执行文件并更改目录时,该相对路径不再存在。默认的datadir类似于/Users/simonshine/Projects/myprog/.stack-work/install/x86_64-osx/d6f6bad3f39945fab394a08b1bc4be948440a07b57dc3d9c354985b39ee09310/8.8.4/share/x86_64-osx-ghc-8.8.4/myprog-0.1.0,但我希望它是例如/usr/local/share. -
您是否考虑过将数据本身硬编码到可执行文件中,而不仅仅是一个路径?
标签: haskell cabal haskell-stack cabal-install