【问题标题】:gmake overriding compiler directorygmake 覆盖编译器目录
【发布时间】:2011-12-03 05:56:33
【问题描述】:

有没有办法指定 gmake 一个备用编译器目录。即:我安装了多个编译器,并在编译时尝试使用备用 gcc。

如果我指定它使用新指定的 gcc。

gmake CC=/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/i686-unknown-linux-gnu/bin/gcc 
    CXX=/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/i686-unknown-linux-gnu/bin/g++ 
    LD=/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/i686-unknown-linux-gnu/bin/gcc 
    AR=/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/i686-unknown-linux-gnu/bin/ar 

我要避免的是为所有工具指定绝对路径。我正在尝试类似的东西

gmake COMPILER_DIR=/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/i686-unknown-linux-gnu/

这也可能适合作为交叉编译器问题。

【问题讨论】:

  • 这完全取决于您的makefile,以及它如何组装编译器命令。我们不能说太多,因为我们不知道。
  • 我认为您可以可靠地做到这一点。 Makefile,至少就变量名而言,是基于convention,并不是每个 Makefile 作者都遵守(不幸的是)。但即便如此,工具的约定也没有说明你试图实现的目标。考虑为您的目的编写一个包装 Makefile 或 shell 脚本。喜欢DIR=/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/i686-unknown-linux-gnu/bin/ && make CC=$DIR/gcc CXX=$DIR/g++ LD=$DIR/ld AR=$DIR/ar

标签: c++ cross-compiling gnu-make


【解决方案1】:

在makefile中你可以使用这样的东西:

CC = $(COMPILER_DIR)gcc

如果您没有定义COMPILER_DIR,则将使用普通系统gcc,否则来自您的目录。

【讨论】:

  • 这是一种简单的方法,但需要我更改 makeflags 以进行移植。这是一个很好的建议,只是希望有本地 gmake 支持。
  • 将此标记为答案,尽管仍在寻找 gmake 原生支持,但没有选择 @christanK 发送的那个,因为它涉及编写额外的 shell 脚本,这有点偏离主要问题。
  • 这个方法确实有问题。如果产品有依赖库,它有自己的 make 文件,你就无法编辑现有的 makefile。所以解决的唯一方法是覆盖gmake CC=/installdir/gcc
【解决方案2】:

以下是 crosstool 工具 chainkit 建议的方式,仅供将来参考。 方法一 而不是使用完整的/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/i686-unknown-linux-gnu/bin/ 使用PATH=/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/bin 并在制作文件中保留CC=$(CROSSCOMPILERVERSION)gcc 其中CROSSCOMPILERVERSION=i686-unknown-linux-gnu 不知何故这种设置效果最好,但仍然不确定如何。

方法二 使用 method.1 中建议的路径,但另外在 crosstool bin 目录中创建软链接。就像在/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/bin 中一样,将 i686-unknown-linux-gnu-gcc 的软链接添加为 gcc。这比更改 makefile 更容易(或者如果您没有更改 makefile 的权限)

【讨论】:

    【解决方案3】:

    当您构建 binutilsgcc 时,它们会安装在两个不同的路径中:

    • bin/PREFIX-gcc
    • PREFIX/bin/gcc

    这允许您在路径中有多个交叉编译器,每个都有不同的可执行文件名称,但您也可以简单地将第二个变体放在路径中,这样gcc 现在是选择的交叉版本。这对 Makefile 很有用。

    您的示例已经使用了第二种形式:/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/i686-unknown-linux-gnu/bin/ar 而不是/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/bin/i686-unknown-linux-gnu-ar(您的系统上可能也存在这种形式)。

    所以您可以使用PATH=/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/i686-unknown-linux-gnu/bin/:$PATH make ... 构建,现在默认的gcc 将是交叉版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多