20

我想在 Hackage 中使用一些特定于平台的库(例如 inotify、kqueue)。但是,关于如何使用条件编译在平台之间切换的文档似乎有点稀少。我在查找相关文档时遇到了一些麻烦...

  1. 我可以使用哪些预处理器定义在平台之间切换?

  2. 如何设置我的 cabal 文件以分别在 linux/osx 上包含/排除 inotify/kqueue?

我希望在这里记录它可能对其他人也有用,因此可能值得提及其他常见平台。到处寻找这些东西是愚蠢的。

4

1 回答 1

13
  1. 如GHC 文档os_HOST_OS中所述,结合 C 预处理器选项-cpp(或 using {-# LANGUAGE CPP #-})查看标志

  2. 添加extensions: CPP到您的包描述中,如Cabal 文档中所示,并定义一个自定义标志,如下所示:

    if os(linux)
         cpp-options: -DINOTIFY
    if os(darwin)
         cpp-options: -DKQUEUE
    

然后,您可以#ifdef在源代码中使用。

于 2012-12-10T14:20:54.937 回答