繁体   English   中英

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

[英]How to write platform-independent code in Haskell (ghc)

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM