Haskell 如何让阴谋集团搜索外部程序?

Haskell 如何让阴谋集团搜索外部程序?,haskell,cabal,Haskell,Cabal,我正在尝试编写一个Haskell程序,它需要外部程序(如lame,mp3编码器)的输出。虽然在cabal中声明对库的依赖关系很容易,但如何声明对可执行文件的依赖关系?除了已知生成工具的列表外,当前不能在.cabal文件中为外部可执行文件添加依赖关系(例如,请参阅生成工具:alex) 但是,您可以指定build type:Configure,然后使用单独的配置脚本来搜索任何其他二进制文件(例如,基于autoconf的配置脚本非常好,可以用于在源代码中设置常量) 请注意,在编译时搜索运行时依赖项(如

我正在尝试编写一个Haskell程序,它需要外部程序(如lame,mp3编码器)的输出。虽然在cabal中声明对库的依赖关系很容易,但如何声明对可执行文件的依赖关系?

除了已知生成工具的列表外,当前不能在.cabal文件中为外部可执行文件添加依赖关系(例如,请参阅生成工具:alex)

但是,您可以指定build type:Configure,然后使用单独的配置脚本来搜索任何其他二进制文件(例如,基于autoconf的配置脚本非常好,可以用于在源代码中设置常量)

请注意,在编译时搜索运行时依赖项(如lame编码器)可能不是一个好主意,因为许多包系统上的构建和运行环境是不同的。最好在程序启动时动态搜索所需的二进制文件

例如,hmp3使用

     mmpg <- findExecutable (MPG321 :: String)

mmpg Cabal是否提供类似于“安装后挂钩”的功能,例如,允许在安装Cabal软件包时尝试安装mp3编码器,而不是构建?您可以在Setup.hs中添加挂钩,以编写类似于此的任何阶段的脚本,但理想情况下,安装外部程序将由软件包系统完成(.deb或.rpm等),它们知道如何查找和构建非Haskell依赖项。