【问题标题】:How can I know in advance where cabal will place a generated executable?我怎么能提前知道 cabal 将生成的可执行文件放在哪里?
【发布时间】:2020-12-07 13:40:04
【问题描述】:

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

dist-newstyle/build/$PLATFORM/$GHC/$PACKAGE-$VERSION/x/$PACKAGE/build/$PACKAGE/$PACKAGE

当我需要运行可执行文件时,我使用Makefile 来运行cabal build

由于我在不同的时间在不同的平台上工作,我需要一种方法来告诉我的Makefile $PLATFORM 的值是什么。

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

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

    BIN := $(wildcard dist-newstyle/build/*/ghc-*/foo-*/x/foo/build/foo/foo)
    
  • 使用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
    
  • 放弃确保 Makefile 中的二进制文件是最新的,只需无条件运行 cabal run

这些中的任何一个都可以工作,但我想知道我是否可以问cabal,告诉我它希望将可执行文件放在哪里。

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

【问题讨论】:

  • 这将是真的有用! (或者是一个 cabal 命令,允许说“构建可执行文件,然后将其放置在这个特定位置”。)
  • Makefile 还构建了什么?
  • @MathematicalOrchid Some rust code.
  • @rampion 啊,好的。好吧,从根本上说,Make 是一个构建系统,而 Cabal 是一个构建系统……试图将两个不同的构建系统切换在一起似乎是自找麻烦。但祝你好运! (我个人的感觉是 cabal run 并保留它;如果有一天 Cabal 改变它的文件布局,它不会中断。)
  • 复制可执行文件不是cabal install的目的吗?

标签: haskell cabal


【解决方案1】:

cabal exec which $EXENAME$ 将为您提供已编译可执行文件的完整路径。

【讨论】:

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