安装可执行文件时硬编码 datadir 路径
Hardcode datadir path upon installing executable
问题:我有一个用 Haskell 编写的命令行工具可以读取数据文件。安装程序后,我希望程序能够读取该数据文件,而不管我在哪个目录中。也就是说,在安装时,程序知道的路径应该与安装程序的路径对齐选择。
初始尝试:默认情况下我被定向到 7.6. Accessing data files from package code in Cabal (the library) and learned that I can import getDataDir :: IO FilePath
from Paths_myprog
, as long as I add Paths_myprog
to other-modules
(although Hpack auto-includes this 部分)并且在安装我的程序后,我可以 运行 它与:
myprog_datadir=~/tmp ~/.local/bin/myprog
然后我需要做的就是让安装程序将数据文件移动到这个目录,因为 myprog
动态访问该路径而不是一些硬编码值。但我不想每次 运行 程序时都必须在我的环境中指定 myprog_datadir=~/tmp
,我希望它硬编码到二进制文件中!似乎在构建和安装时设置 myprog_datadir=~/tmp
不会设置编译时默认值。
所以:有没有办法在安装时对这条路径进行硬编码?
(最好是与 Stack 相关的答案,但也非常感谢 cabal-install 的答案。)
data-files
中列出的文件已自动安装在正确的位置,以便 Paths_pkg
可以找到它们。这是一个最小的例子:
% cat Main.hs
import Paths_so_test
main :: IO ()
main = getDataDir >>= putStrLn
% cat so-test.cabal
cabal-version: >=1.10
name: so-test
version: 0.1.0.0
build-type: Simple
data-files: test
executable so-test
main-is: Main.hs
other-modules: Paths_so_test
autogen-modules: Paths_so_test
build-depends: base >=4.14 && <4.15
default-language: Haskell2010
% cat test
Hello, world!
% cabal install
Wrote tarball sdist to
/home/dmwit/projects/oneoff/tmp.dir/dist-newstyle/sdist/so-test-0.1.0.0.tar.gz
Resolving dependencies...
Up to date
Symlinking 'so-test'
% cat `so-test`/test
Hello, world!
问题:我有一个用 Haskell 编写的命令行工具可以读取数据文件。安装程序后,我希望程序能够读取该数据文件,而不管我在哪个目录中。也就是说,在安装时,程序知道的路径应该与安装程序的路径对齐选择。
初始尝试:默认情况下我被定向到 7.6. Accessing data files from package code in Cabal (the library) and learned that I can import getDataDir :: IO FilePath
from Paths_myprog
, as long as I add Paths_myprog
to other-modules
(although Hpack auto-includes this 部分)并且在安装我的程序后,我可以 运行 它与:
myprog_datadir=~/tmp ~/.local/bin/myprog
然后我需要做的就是让安装程序将数据文件移动到这个目录,因为 myprog
动态访问该路径而不是一些硬编码值。但我不想每次 运行 程序时都必须在我的环境中指定 myprog_datadir=~/tmp
,我希望它硬编码到二进制文件中!似乎在构建和安装时设置 myprog_datadir=~/tmp
不会设置编译时默认值。
所以:有没有办法在安装时对这条路径进行硬编码?
(最好是与 Stack 相关的答案,但也非常感谢 cabal-install 的答案。)
data-files
中列出的文件已自动安装在正确的位置,以便 Paths_pkg
可以找到它们。这是一个最小的例子:
% cat Main.hs
import Paths_so_test
main :: IO ()
main = getDataDir >>= putStrLn
% cat so-test.cabal
cabal-version: >=1.10
name: so-test
version: 0.1.0.0
build-type: Simple
data-files: test
executable so-test
main-is: Main.hs
other-modules: Paths_so_test
autogen-modules: Paths_so_test
build-depends: base >=4.14 && <4.15
default-language: Haskell2010
% cat test
Hello, world!
% cabal install
Wrote tarball sdist to
/home/dmwit/projects/oneoff/tmp.dir/dist-newstyle/sdist/so-test-0.1.0.0.tar.gz
Resolving dependencies...
Up to date
Symlinking 'so-test'
% cat `so-test`/test
Hello, world!