0

我想将一些自定义的、每个可执行文件/库配置(理想情况下是一整袋键值对,但至少是一个String)从我的.cabal文件一直传递到Setup.hs's buildHook

作为参考,buildHook的参数为:

buildHook 
    :: PackageDescription 
    -> LocalBuildInfo
    -> UserHooks
    -> BuildFlags -> IO ()

所以我希望的是PackageDescription's library/executables字段中的某些内容,可以让我访问自定义字段,而不会破坏所有其他 Cabal 阶段,我可以将其放入.cabal文件中。这是一个虚构的例子,基本上和它一样好:

...

executable my-exe
  main-is: my-main.hs
  ...
  plugin-args:
    myplugin:
      foo: bar
      baz: quux 

所以我可以检索所有myplugin键/值对以获取"foo" |-> "bar", "baz" |-> "quux"某种关联数据结构,例如HashMap.

请注意,我已经在我Setup.hs的 . 如果需要,我可以覆盖所有Setup.hs钩子以忽略所有内容中的某些设置,buildHook但是,如果某些解决方案需要这样做。

4

1 回答 1

0

虽然我没有在用户文档中找到它,但type中有这个块BuildInfo

customFieldsBI :: [(String, String)]

以 开头的自定义字段x-,存储在一个简单的关联列表中。

所以事实证明你可以写

...
executable my-exe
  main-is: my-main.hs
  ...
  plugin-args:
    x-myplugin: foo

然后使用lookup "x-myplugin" . view customFieldsBI :: (HasBuildInfo bi) => bi -> Maybe String.

特别是,Executable并且LibraryHasBuildInfo实例,所以你可以遍历其中并PackageDescription在那里buildHook处理它们的String值。

于 2020-05-05T13:31:24.970 回答