在cabal上使用extra-lib-dirs的相对路径

amm*_*moh 8 haskell cabal

我有一个C库"myboo",它有Makefile.我想制作一个这个库的包装器.我不想将它安装到/ usr/local中,因为"myboo"不是主要模块.另外,建议我将"myboo"不是作为动态库而是作为静态库构建.

我自定义Setup.py来构建"myboo";

main :: IO ()
main = defaultMainWithHooks simpleUserHooks {
           preBuild = \a b -> makeLib a b >> preBuild simpleUserHooks a b
           }

makeLib :: Args -> BuildFlags -> IO ()
makeLib _ flags = do
  let verbosity = fromFlag $ buildVerbosity flags
  cflags <- lookupEnv "CFLAGS" >>= return . maybe "" id
  setEnv "CFLAGS" $ "-fPIC" ++ (' ' : cflags)
  rawSystemExit verbosity "env" ["make", "--directory=myboo", "libmyboo.a"]
Run Code Online (Sandbox Code Playgroud)

我安排myboo.cabal将我的haskell代码链接到C库;

library
  exposed-modules:     MyBoo
  build-depends:       base >=4.7 && <4.8
  hs-source-dirs:      src
  default-language:    Haskell2010
  include-dirs: myboo
  extra-libraries: myboo
  extra-lib-dirs: myboo
Run Code Online (Sandbox Code Playgroud)

当我运行"cabal build"时,我收到了以下消息.

myboo-0.1.0.0: library-dirs: myboo is a relative path which makes no sense (as
there is nothing for it to be relative to). You can make paths relative to the
package database itself by using ${pkgroot}. (use --force to override)
Run Code Online (Sandbox Code Playgroud)

如果我写"extra-lib-dirs:/ absolute/path/to/working/dir/myboo",它似乎运行良好.但这不是好办法因为/ absolute/...只是一个工作目录.

我该如何修复上述错误消息?我的环境在这里;

% ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.8.2
% cabal --version
cabal-install version 1.20.0.2
using version 1.20.0.0 of the Cabal library
% cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS"
Run Code Online (Sandbox Code Playgroud)

sna*_*nak 8

您可以编写自己的Setup.hs和设置Distribution.Simple.confHook.在钩子函数中,修改Distribution.PackageDescription.extraLibDirs以包含目录.

请注意,您还需要更改cabal文件中的build-typeto Custom.

这是一个指向Setup.hs的链接,我在其中完成了我所写的内容.