如何在Haskell(ghc)中编写与平台无关的代码

时间:2012-12-10 10:35:50

标签: haskell platform-independent platform-specific

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

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

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

  3. 我希望在此处记录它可能对其他人也有用,所以提及其他常见平台可能是值得的。到处寻找这些东西真是太傻了。

1 个答案:

答案 0 :(得分:12)

  1. 根据GHC documentation os_HOST_OS标记以及C预处理器选项-cpp(或使用{-# LANGUAGE CPP #-}) >

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

    if os(linux)
         cpp-options: -DINOTIFY
    if os(darwin)
         cpp-options: -DKQUEUE
    
  3. 然后,您可以在来源中使用#ifdef