当我cabal build为我的项目运行时,它会将我编译的可执行文件放在
dist-newstyle/build/$PLATFORM/$GHC/$PACKAGE-$VERSION/x/$PACKAGE/build/$PACKAGE/$PACKAGE
Run Code Online (Sandbox Code Playgroud)
当我需要运行可执行文件时,我使用 aMakefile来cabal 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)
放弃确保二进制文件是最新的Makefile并cabal run无条件地运行
其中任何一个都可以,但我想知道我是否可以要求cabal告诉我它希望在哪里放置可执行文件。
是否有cabal我可以运行的命令来告诉我它检测到什么$PLATFORM和/或$GHC值?
从 cabal 3.8 开始,您可以使用以下list-bin命令:
$ cabal list-bin my-executable-name
Run Code Online (Sandbox Code Playgroud)
这将打印 cabal 将放置可执行文件(如果构建)的路径。请注意,它实际上并不能保证可执行文件已构建,因此根据您的用例,您可能也需要检查这一点。