【发布时间】: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的目的吗?