我有一个本地创作Haskell的项目,这既产生:如何使用堆栈来安装本地创作的Haskell模块以实现全局使用?
- 二进制可执行文件,
- 几个新的哈斯克尔模块,我想发到我的其他访问,哈斯克尔基础,可执行文件。
后:
stack build
stack install
我发现:
- 二进制可执行文件(#1,以上)运行在任何目录下就好了。
- 但是,新的Haskell模块(上面#2)只有在我从我的项目目录中运行时才能找到! (也就是说,对于除#1以外的任何可执行文件)。
我需要能够从任何地方找到新模块。 我该如何做到这一点?
听起来和[这个问题只有几个小时前]类似(https://stackoverflow.com/questions/47989939/is-there-a-declarative-way-to-specify-packages-to-be-installed- into-global-proje),在那里我建议你使用Cabal-install而不是stack,那么你永远不需要担心模块安装是全局的。 – leftaroundabout
感谢您的评论。是的,“cabal install”确实解决了我的问题。然而,现在我已经有了两个单独的,并行的,大部分冗余的Haskell设备来啃硬盘空间,这看起来非常浪费和不必要。这尤其令人愤慨,因为我生产的二进制可执行文件可以在任何目录下运行,这意味着它知道如何从我的系统的任何地方(因为它导入它们)找到我的新Haskell模块。那么,为什么我不能让这些新模块可用于其他Haskell可执行文件呢? – dbanas
这绝对是不必要的,这就是为什么我在我的笔记本电脑上只使用_only_ Cabal-install,而仅使用Travis的Stack。 - 请注意,您的可执行文件找到导入模块的方式与编译器为源文件找到它们的方式有很大不同。事实上,如果你静态链接,那么就不需要找到任何外部的东西,因为一切都已经包含在二进制文件中了。如果您动态链接,它会查找特定散列动态库文件的硬编码路径,但这只适用于版本解析程序和链接程序在完成之前完成其工作。 – leftaroundabout