gmake重写编译器目录

时间:2011-11-21 10:52:51

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

有没有办法指定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/

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

3 个答案:

答案 0 :(得分:0)

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

CC = $(COMPILER_DIR)gcc

如果您未定义COMPILER_DIR,则将使用正常系统gcc,否则将使用您的目录。

答案 1 :(得分:0)

仅供将来参考,这是crosstool工具chainkit的建议。 方法1 而不是使用完整的/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并在make文件中将CC=$(CROSSCOMPILERVERSION)gcc保留在CROSSCOMPILERVERSION=i686-unknown-linux-gnu这个设置最佳的位置,仍然不确定如何。

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

答案 2 :(得分:0)

当您构建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将是交叉版本。