12

因此,我编写了一个简洁的小程序,可以分析日语文本并为用户提供有关其中汉字使用情况的各种统计数据,我想将这个程序发布给全世界。问题是,我不知道如何创建“发布”。

我意识到 *nix 系统经常将可执行文件(或符号链接)放在 /usr/bin 之类的地方,并且构建脚本通常会自动将它们放在那里,但事实证明我去用 Haskell 编写了这个东西。

然后就用阴谋集团!

...我听到你说。好吧,我会,除了我的程序有大量的数据文件可以读取,当然程序需要知道这些文件在哪里。通过使用 cabal,可执行文件不会被扔到一些奇怪的项目文件路径中吗:

/usr/share/haskell/cabal/morecabal-1.0.4/myproject-1.3.4.1.a/thisisridiculous/

目前我从它的源目录运行可执行文件,它正在“./data”中寻找数据文件。是否有安装路径的典型格式,以便我可以提前告诉我的程序在源中查找数据的位置?

我的最终目标是把它变成一个 Arch Linux 包。谁能帮我开始?

对于好奇的人,git repo 在这里。提前感谢您提供的任何帮助。

4

2 回答 2

12

在 Cabal 项目中引用数据文件的可移植方式是在文件的data-files属性中命名它们.cabal

Cabal 将生成一个名为的模块,该模块Paths_packagename定义了一个函数

getDataFileName :: FilePath -> IO FilePath

您的代码可以使用它来确定数据文件的安装位置。

请参阅:从包代码访问数据文件

于 2012-04-23T11:30:59.637 回答
8

看看现有的 Haskell 项目,例如Gitit是如何为 Arch linux打包的。特别是 PKGBUILD。

您还可以下载gitit tarball并查看如何使用文件data-files:中的指令gitit.cabal

我没有读过 Haskell,但是根据我对源代码的了解,该文件Paths_gigit.hs(可以在此处找到。)是由 cabal 生成的,因此您只需要担心相对路径。然后只需导入它并使用该getDataFileName功能即可。

拱门包装:

阴谋集团的包装:

两者的包装:

  • Archlinux wiki 上的Haskell 包指南
于 2012-04-23T11:35:34.413 回答