【问题标题】:Cabal with multiple Library sections具有多个图书馆部分的阴谋集团
【发布时间】:2013-08-10 00:59:14
【问题描述】:

是否可以写一个Cabal的配置文件,里面包含多个Library sections

我在the documentation 中找到了Library section 和Executables sections 的描述,看来不可能在一个Cabal 配置文件中放置更多Library 部分.

但是如果我正在开发几个 Haskell 库和几个可执行文件,我该怎么办
同时编译并测试它们?

【问题讨论】:

    标签: haskell build cabal build-system


    【解决方案1】:

    AFAIK,你不能在一个 cabal 文件中放置多个库。 Name 字段中指定的名称(位于 cabal 文件的顶层)用作库的名称,因此似乎没有指定其他库名称的机制。

    在实践中,我没有发现这是一个问题。我在一个单独的目录中开发每个库,并使用它自己的 cabal 文件。在您开发的库上运行 cabal install 后,就可以在可执行文件的 cabal 文件中引用它(在 Build-Depends 部分),就像 Hackage 上的包一样。

    因此,例如,如果您有两个带有如下 cabal 文件的库:

    Name:              my-library-1
    . . .
    

    Name:              my-library-2
    . . .
    

    然后你的可执行文件的 cabal 文件可以像这样引用它们:

    Name:              my-program
    . . .
    Executable run-program
    Main-Is:          Main.hs
    Build-Depends:    my-library1,
                      my-library2,
                      . . .
    

    您甚至可以要求特定版本的库。例如:

    Build-Depends:    my-library1==1.2.*,
                      my-library2>=1.3
    

    【讨论】:

    • 谢谢,我知道我可以像这样使用它,但我想简化一次开发多个库的过程 - 并一直构建和重新安装它们,但似乎 cabal-dev解决了我的问题。
    • 啊,我没有意识到你可以用cabal-dev 做那种事情。您可能想描述您是如何做到的,将其作为答案发布在这里,然后接受它。其他人可能对此解决方案感兴趣。
    • @mhwombad - 见下文:)
    【解决方案2】:

    这在 Cabal 2 中是可能的,带有内部库,即所谓的“便利”库:https://github.com/haskell/cabal/pull/3022。但是,这不会让您安装这些库,它们只被允许组合成由.cabal 文件公开的最终可执行文件和公共库。如果你想构建多个正在进行的东西,你应该使用 cabal.project 文件 - http://blog.ezyang.com/2016/05/announcing-cabal-new-build-nix-style-local-builds/ 有一些关于此的信息。

    【讨论】:

      【解决方案3】:

      我发现,我的问题可以通过最新的cabal-dev 轻松解决。

      如果您有 2 个项目:AB,并且您希望并行开发它们,那么使用 cabal-dev install A B 非常好 - 它将构建并安装它们到本地 cabal-dev 存储库。如果您重新运行此命令,它们将被重建并在必要时重新安装。

      根据文档 - 如果你想在 local cabal-dev hackage注册新的覆盖现有的包,你应该使用@ 987654326@,它基本上是复制源代码并允许您像在hackage 上一样安装它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多