构建一个软件包

emake 函数应用于调用 make。这将确保用户的MAKEOPTS正确使用。 emake 函数传递提供的任何参数,因此可以用于创建非默认目标(emake extras)。有时候,你可能会遇到一个非常古怪的非自动工具 Makefile文件,emake失败,但这很少见。

应使用MAKEOPTS中各种-j设置对构建进行测试, 以确保构建正确并行化。如果软件包不能完全并行,则应打补丁。

如果确实不能修补, 则应使用emake -j1。但是,在执行此操作时,请记住,特别是对于许多非 x86 用户而言,这严重损害了构建时间。 在某些 MIPS 和 SPARC 系统上,强制使用 -j1 可能会使构建时间从几分钟增加到一个小时。

修复编译器使用

有时,一个软件包会尝试使用一个奇怪的编译器,或者需要被告知要使用哪个编译器。在这些情况下,应使用 toolchain-funcs.eclass 中的 tc-getCC()函数 。还可以使用其他类似函数——在man toolchain-funcs.eclass中进行了记录 。

注意:为此目的使用变量
${CC}
是不正确的。

有时,软件包不会使用用户的${CFLAGS}${LDFLAGS}。必须解决此问题,因为有时这些变量用于指定关键的应用二进制接口选项。在这些情况下,应将构建脚本修改(例如,使用sed)以正确使用${CFLAGS}${LDFLAGS}

inherit flag-o-matic toolchain-funcs

src_compile() {
    # -Os not happy
    replace-flags -Os -O2

    # We have a weird build.sh to work with which ignores our
    # compiler preferences. yay!
    sed -i -e "s:cc -O2:$(tc-getCC) ${CFLAGS} ${LDFLAGS}:" build.sh \
        || die "sed fix failed. Uh-oh..."
    ./build.sh || die "Build failed!"
}
注意:当sedCFLAGSLDFLAGS一起使用时 ,使用逗号或作为分隔符斜杠不安全。推荐的字符是冒号。

Portage 执行质量检查,以验证是否遵守 LDFLAGS。仅当 LDFLAGS 变量包含-Wl,--hash-style=gnu时,才启用此质量检查。(此标志只能在使用 sys-libs/glibc的系统上,MIPS CPU 的机器除外。)

results matching ""

    No results matching ""