Nix入门:如何用Nix的方式执行configure/make编译安装流程?
未适配Nix软件包的标准实操流程
前置说明
你要的./configure && make && make install对应的Nix实现,核心是用Nix内置的stdenv构建抽象层自动处理编译参数、依赖注入、安装路径逻辑,不需要你手动处理$CFLAGS/$LDFLAGS这类变量,也不会污染全局路径。
下面以你提到的ObjFW为例,分两步完成操作:
第一步:快速验证可构建性
如果只是要先测试能不能正常编译安装,不需要长期留存,按以下流程操作即可:
- 新建一个空目录,在目录内创建
default.nix文件,内容如下:
# 引入当前系统的nixpkgs仓库 with import <nixpkgs> {}; # 调用标准构建工具打包 stdenv.mkDerivation rec { # 包名+版本号,可自定义 pname = "objfw"; version = "unstable-20240520"; # 拉取源码,也可以替换为源码压缩包地址 src = fetchFromGitHub { owner = "ObjFW"; repo = "ObjFW"; rev = "填写你要构建的commit哈希,比如主分支最新提交的哈希"; # 哈希获取方式:第一次随便填写假值,比如sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=,构建时Nix会报错给出真实哈希,替换即可 hash = "sha256-替换为真实的源码哈希"; }; # 填写构建依赖,后续构建报错缺什么就补什么 buildInputs = [ # 比如需要openssl就加openssl,需要zlib就加zlib,根据实际报错调整 ]; # stdenv会自动执行configure、make、make install流程,不需要手动编写,有自定义参数时打开下方配置即可 # configureFlags = [ "--enable-shared" "--disable-static" ]; }
- 执行
nix-build命令,当前目录会生成名为result的软链接,指向Nix存储中编译完成的包,直接运行result/bin/下的二进制文件即可测试功能是否正常。
第二步:正式安装到Nix环境
确认构建无问题后,二选一完成安装即可:
- 临时安装到当前用户环境:在
default.nix所在目录执行nix-env -i -f default.nix,安装完成后即可全局调用ObjFW的相关命令 - 永久加入配置(符合Nix声明式理念,推荐):把上面的derivation内容写入你的Nix配置文件的
environment.systemPackages(系统级安装)或者home.packages(用户级安装,使用home-manager时),执行对应的配置生效命令即可。
常见问题处理
- 构建提示缺少依赖:把缺少的依赖包名添加到
buildInputs数组中重新构建即可 - 非标准构建流程适配:如果软件包不符合标准的configure/make流程,只需在derivation中重写
buildPhase、installPhase等阶段的执行逻辑即可,其他部分无需调整
内容的提问来源于stack exchange,提问作者Ingwie Phoenix
相关产品推荐
相关产品推荐

