用户环境

用户环境变量和make.conf设置将传递给 ebuild。这可能很有用——例如,CFLAGS和其它变量一起工作——但它也可能导致令人讨厌的构建中断变量(如LANGLC_ALL)通过。当前,还没有方法不对环境产生破坏。

过滤变量

某些变量确实会导致某些构建系统失败。一个很好的例子是语言环境变量(LC_ALL 等),如果将其设置为某些值,如果将其设置为某些值,将导致涉及[A-Z]之类的sedgrep表达式失败。在这里最简单的方法是 unset 清理或清除pkg_setup中的有害变量 。

取消设置所有与语言环境相关的变量的最简单方法是:

pkg_setup() {
    # Unset all locale related variables, they can make the
    # build fail.

    eval unset ${!LC_*} LANG
}

不过滤变量

另一方面,极其重要的是要尽可能地尊重某些用户的偏好。一个很好的例子是 CFLAGS,必须予以尊重(选择性过滤是可以的,但完全忽略不是)。CFLAGS 编译时忽略 可能会导致严重的问题:

  • 忽略 march/mcpu 可能会在某些架构上对某些操作码强制进行内核或软件仿真。这可能非常慢——例如, 为 SPARC v7 构建但在 v9 上运行的openssl对于 RSA 操作而言要慢大约五倍。
  • 剥离某些与 ABI 相关的标志将破坏链接。
  • 剥离某些与 ABI 相关的标志将导致某些设置产生无效的代码。在极端的情况下,我们可能会因为愚蠢的事情而终止,例如为小端 CPU 生成大端代码。
  • 如果忽略用户的march/mcpu/mtune,使用自动检测的设置,则 GRP 和阶段会中断。例如,i686 平台不再可以在 pentium-4 上生产,而 v8 平台不再可以在 UltraSparc 上生产。

一些软件包会无意间这样做。例如,在Makefile.am中可能会看到 CFLAGS=-Wall。要解决此问题,请在用户的CFLAGS中设置sed或(更好的解决方案)将变量更改为AM_CFLAGS,该变量将自动与用户的设置合并。 LDFLAGS 也应该注意。

results matching ""

    No results matching ""