我怎么能提前知道 cabal 将在哪里放置生成的可执行文件?

ram*_*ion 8 haskell cabal

当我cabal build为我的项目运行时,它会将我编译的可执行文件放在

dist-newstyle/build/$PLATFORM/$GHC/$PACKAGE-$VERSION/x/$PACKAGE/build/$PACKAGE/$PACKAGE
Run Code Online (Sandbox Code Playgroud)

当我需要运行可执行文件时,我使用 aMakefilecabal build根据需要运行。

因为我在不同的时间在不同的平台上工作,所以我需要一种方法来告诉我Makefile期望的$PLATFORM价值是什么。

有几种方法可以解决这个问题:

  • cabal build无条件运行一次,然后使用通配符:

    BIN := $(wildcard dist-newstyle/build/*/ghc-*/foo-*/x/foo/build/foo/foo)
    
    Run Code Online (Sandbox Code Playgroud)
  • 用于uname预测平台将是什么

    BIN := dist-newstyle/build/$(shell uname -m)-$(shell uname -s | some magic)/ghc-$(shell ghc --version | some magic)/foo-$(VERSION)/x/foo/build/foo/foo
    
    Run Code Online (Sandbox Code Playgroud)
  • 放弃确保二进制文件是最新的Makefilecabal run无条件地运行

其中任何一个可以,但我想知道我是否可以要求cabal告诉我它希望在哪里放置可执行文件。

是否有cabal我可以运行的命令来告诉我它检测到什么$PLATFORM和/或$GHC值?

Nou*_*are 3

从 cabal 3.8 开始,您可以使用以下list-bin命令:

$ cabal list-bin my-executable-name
Run Code Online (Sandbox Code Playgroud)

这将打印 cabal 将放置可执行文件(如果构建)的路径。请注意,它实际上并不能保证可执行文件已构建,因此根据您的用例,您可能也需要检查这一点。