如何解决如何在 nix 包中指定主机和构建平台在 Nix 中交叉编译
我是 Nix 的新手,正在努力掌握 Nix 的交叉编译概念。 我知道可以在 Nix 包中访问属性 stdenv.hostPlatform 和 buildPlatform 并相应地选择库和工具。
但是我对两件事感到困惑:
- 我正在创建一个 nix 包 -> 我如何指定该包的主机平台和构建平台是什么?默认情况下,Nix 选择用户正在构建的系统作为“构建”平台,“主机”平台默认为“构建”,“目标”平台默认为“主机”。但是,作为包创建者,我该如何告诉 Nix 有关构建和托管平台的信息。
- 如何提供一个 Nix 不知道的构建和托管平台?是否可以在我的 Nix 包中定义我自己的自定义平台?
我阅读了 nix 文档 (https://nixos.org/manual/nixpkgs/stable/#chap-cross),但无法回答上述 2 个问题。
任何帮助或指示将不胜感激。
我做了一些试验:
我的原始代码
{cmake,stdenv,gcc,coreutils,bar,git,doxygen,lib}:
stdenv.mkDerivation rec {
pname = "foo";
version = "1.0";
src = ./foo;
buildInputs = [ bar ];
nativeBuildInputs = [ cmake doxygen ];
strictDeps = true;
configurePhase = ''
cmake -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=$src/tools/toolchains/mytoolchain.cmake .
'';
installPhase = ''
make install
mkdir -p $out;
cp -R lib $out;
cp -R include $out;
cp -R bin $out;
'';
dontFixup = true;
}
我在上面的代码中更改或添加了“system”属性,Nix 不会重建包。
system = "mycpu-myos";
我假设 Nix 会检测到它是一个新系统或构建平台;这是未知的,应该失败;因为用户尝试构建的当前系统不是 nix 表达式中提到的“系统”。
我知道,我在这里缺少对概念的非常基本的理解。但想不通,是什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。