Проблема: у меня есть инструмент командной строки, написанный на Haskell, который читает файл данных. После установки программы я хотел бы, чтобы программа могла читать этот файл данных независимо от того, в каком каталоге я нахожусь. То есть при установке путь, который знает программа, должен быть выровнен с путем, который установщик выбирает.
Первоначальная попытка: меня перенаправили в раздел 7.6. Получив доступ к файлам данных из кода пакета в Cabal (библиотеке), я узнал, что могу импортировать getDataDir :: IO FilePath
из Paths_myprog
, если добавлю Paths_myprog
к other-modules
(хотя Hpack автоматически включает это по умолчанию), и что после установки моей программы я могу запустить ее с помощью:
myprog_datadir=~/tmp ~/.local/bin/myprog
Затем все, что мне нужно сделать, это заставить установщика переместить файл данных в этот каталог, поскольку myprog
динамически обращается к этому пути, а не к какому-то жестко заданному значению. Но я не хочу указывать myprog_datadir=~/tmp
в своей среде каждый раз, когда я запускаю программу, я хочу, чтобы она была жестко запрограммирована в двоичном коде! И кажется, что установка myprog_datadir=~/tmp
при сборке и установке не устанавливает значение по умолчанию во время компиляции.
Итак: есть ли способ жестко указать этот путь при установке?
(Желательно, чтобы ответ относился к стеку, но ответ на установку клики также приветствуется.)
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
. - person Simon Shine   schedule 16.02.2021