我在Hackage上维护一个带有FFI绑定的库.所以我的
Haskell库依赖于相应的C库及其头文件.现在我在.cabal文件中指定外部依赖关系,如下所示:
PkgConfig-Depends: libfoo >= 1.2
它在Linux中对我来说很好.但是,我有一个库的用户报告,在Windows上安装pkg-config是相当麻烦,而他喜欢
Includes: foo.h Extra-libraries: foo
我希望我的库尽可能容易地构建,并且不希望强制不是严格要求的构建依赖关系.但是,我看到Cabal manual建议使用PkgConfig-Depends.
我的问题:
>我应该选择哪种方式进行跨平台包?
>可以这样写一个.cabal文件,它可以与pkg-config一起使用吗?
>而且,顺便说一句,pkg-config包含在Haskell平台中(我现在没有Windows机器来检查)?
pkg-config方法是最好的,因为pkg-config知道在哪里可以找到include和library文件,这些文件可能在某些系统上的非标准位置.
您可以编写.cabal文件以使用这两种方法.如图所示,使用一个标志的优点是,如果默认值失败,Cabal会自动尝试其他标志值. (以下示例未测试)
Flag UsePkgConfig Description: Use pkg-config to check for library dependences Default: True Executable hax if flag(UsePkgConfig) PkgConfig-Depends: libfoo >= 1.2 else Includes: foo.h Extra-libraries: foo