我想在Hackage中使用一些特定于平台的库(例如inotify,kqueue)。但是,有关如何使用条件编译在平台之间切换的文档似乎有点稀疏。我在查找相关文档时遇到了一些麻烦......
我可以使用哪些预处理器定义在平台之间切换?
如何设置我的cabal文件以分别在linux / osx上包含/排除inotify / kqueue?
我希望在此处记录它可能对其他人也有用,所以提及其他常见平台可能是值得的。到处寻找这些东西真是太傻了。
答案 0 :(得分:12)
-cpp
(或使用{-# LANGUAGE CPP #-}
) > 将extensions: CPP
添加到您的包描述中,如Cabal documentation所示,并定义一个自定义标记,如下所示:
if os(linux)
cpp-options: -DINOTIFY
if os(darwin)
cpp-options: -DKQUEUE
然后,您可以在来源中使用#ifdef
。