我有一个使用
在项目根目录中运行
如果我进入该目录,会看到4个目录:
- bin - lib - nix-support - share 我的可执行文件存在于
这里是我的cabal文件的相关部分,其中包含应用程序使用的数据文件列表:
当应用程序使用
可执行文件相对于当前工作目录查找所有文件。
cabal.mkDerivation
创建Nix派生物的Haskell项目。在项目根目录中运行
nix-build
后,成功构建后会得到预期的result
符号链接。如果我进入该目录,会看到4个目录:
- bin - lib - nix-support - share 我的可执行文件存在于
bin
中。当我尝试运行我的可执行文件时,它无法找到我的应用程序文件或动态库。我理解这是由于缺少设置所有包路径的环境变量导致的。
如何在不安装软件的情况下使用正确的环境变量运行软件包的可执行文件?
我知道可以使用nix-shell
来使用cabal run
运行可执行文件,但我想在部署状态下运行可执行文件。
编辑#1:更多信息
这是我项目中的default.nix
文件:{ haskellPackages ? (import <nixpkgs> {}).haskellPackages_ghc783_no_profiling }:
let
inherit (haskellPackages)
blazeHtml
... list of deps
;
in
cabal.mkDerivation (self: {
pname = "myproject";
version = "0.0.1";
src = ./;
enableSplitObjs = false;
buildTools = [
yesodBin
cabalInstall
];
buildDepends = [
blazeHtml
... list of deps
];
})
这里是我的cabal文件的相关部分,其中包含应用程序使用的数据文件列表:
data-files: config/favicon.ico
, config/robots.txt
, config/settings.yml
, static/css/*.css
, static/fonts/*.eot
, static/fonts/*.svg
, static/fonts/*.ttf
, static/fonts/*.woff
, static/img/*.jpg
当应用程序使用
cabal install
部署时,其结构如下: myproject
▾ config
favicon.ico
robots.txt
settings.yml
▾ static
▸ css
▸ fonts
▸ img
可执行文件相对于当前工作目录查找所有文件。
config
和static
在项目的根目录下。因此,当我在项目根目录中运行cabal run
时,文件会相对查找。有关更多信息,请参见我的编辑。 - rzetterberg