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

2023-11-24

我有一个 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"]

我安排 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

当我运行“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)

如果我写“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"

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

请注意,您还需要更改build-type to Custom在你的阴谋集团文件中。

这是一个链接Setup.hs我在其中做了我写的事情。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐