sas*_*nin 14 windows haskell packaging pkg-config cabal
我在Hackage上维护了一个带有FFI绑定的库.所以我的Haskell库依赖于相应的C库及其头文件.现在我在.cabal文件中指定外部依赖项,如下所示:
PkgConfig-Depends:
libfoo >= 1.2
Run Code Online (Sandbox Code Playgroud)
它在Linux中对我很有用.但是,我有一个库的用户报告,pkg-config在Windows 上安装相当麻烦,而他更喜欢
Includes:
foo.h
Extra-libraries:
foo
Run Code Online (Sandbox Code Playgroud)
我希望我的库尽可能容易构建,并且不希望强制不严格要求的构建依赖项.但是,我看到Cabal手册建议使用PkgConfig-Depends.
我的问题:
.cabal这样的方式编写文件,它可以使用pkg-config和不使用?pkg-config包含在Haskell平台中(我现在没有Windows机器可以检查)?Hea*_*ink 14
pkg-config方法更可取,因为pkg-config知道在哪里可以找到包含文件和库文件,这些文件可能位于某些系统的非标准位置.
您可以编写.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
Run Code Online (Sandbox Code Playgroud)
pkg-config 不包含在Haskell平台中,我也无法想象它会是什么.
通常我会使用includes/Extra-libraries它们,如果它们相对简单.但是对于可能包含很多库的复杂软件包,例如gtk,在可用时使用pkg-config要好得多.
可以编写一个可以使用和不使用特定字段的.cabal文件.试试这个:
if os(windows)
Includes:
foo.h
Extra-libraries:
foo
else
PkgConfig-Depends:
libfoo >= 1.2
Run Code Online (Sandbox Code Playgroud)
另请注意,.cabal可以运行配置脚本,这在某些情况下可能会有所帮助,但对Windows不友好.
| 归档时间: |
|
| 查看次数: |
2627 次 |
| 最近记录: |