我在NixOS上,试图编译一个需要linenoise库(它是readline的替代品)的c项目。但在尼克斯帕克斯没有线路噪音。
所以,我想自己补充一下。现在我有这个:

{ stdenv, fetchgit }:

stdenv.mkDerivation rec {
  name = "linenoise-${version}";
  version = "git-2016-09-30";

  src = fetchgit {
    url = "https://github.com/antirez/linenoise.git";
    rev = "c894b9e59f02203dbe4e2be657572cf88c4230c3";
    sha256 = "0wasql7ph5g473zxhc2z47z3pjp42q0dsn4gpijwzbxawid71b4w";
  };

  meta = {
    homepage = https://github.com/antirez/linenoise;
    description = "A minimal, zero-config, BSD licensed, readline replacement.";
    platforms = stdenv.lib.platforms.unix;
  };
}

我有两个问题:
1:Linenoise只是一对c头/源文件,打算直接包含在使用Linenoise的项目中。换句话说,不需要编译,只添加这些文件就足够了。
现在的推导显然是试图configure/make/make install,但我不知道怎么做。
2:Linenoise需要与pkg配置兼容。

最佳答案

在Nixpkgs中很容易绕过configure/make/make安装步骤。您可以使用buildCommand属性,在这里您可以清楚地指定如何将源转换为包。

buildCommand = ''
  mkdir -p $out/include
  cp $src/linenoise.c $out/include/
  cp $src/linenoise.h $out/include/
'';

使用$src变量的技巧也很简单:几乎在mkDerivation中定义的每个属性都可以在build命令中使用相同的名称。您可以使用src_libnoise = fetchgit ...,然后将其称为$src_libnoise
至于pkg-config的内容,我不确定它是否尊重include目录,所以您必须弄清楚pkg-config如何找到它的includes。

关于c - 将线噪声库添加到nixpkgs,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39796088/

10-11 23:12