如何为"gem install"指定编译器?

Ale*_*lex 11 compiler-construction gem

如何指定应该使用哪个编译器gem install?在Bash

CC=gcc gem install ...
Run Code Online (Sandbox Code Playgroud)

没有帮助,因为它仍然在我的系统上使用solaris studio.

Ale*_*sky 8

对于sqlite3-ruby,自2011年1月提交以来支持您的方法.但总的来说,由于rubygems的工作原理,不可能覆盖它.它

  1. 打开宝石包装.

  2. 调查它并发现它使用'extensions'属性 - 通常是特殊编写的extconf.rb文件的路径.

  3. 运行该文件以生成Makefile.除非extconf.rb的作者明确表示尊重env变量,否则它们将被忽略.例如,在最新版本的sqlite3-ruby gem中,它的extconf.rb有一行

    RbConfig::MAKEFILE_CONFIG['CC'] = ENV['CC'] if ENV['CC']
    
    Run Code Online (Sandbox Code Playgroud)

    所以,如果你在Bash中运行

    CC=gcc gem install sqlite3-ruby
    
    Run Code Online (Sandbox Code Playgroud)

    extconf.rb将生成Makefile,CC其中包含设置为gcc或您想要的任何变量.

  4. 生成Makefile后,rubygems执行make实用程序来编译扩展.

从理论上讲,如果rubygems允许我们为make指定其他命令行参数,我们可以使用它的-e选项,然后根本不依赖于extconf.rb的作者.(-e选项提供从环境优先于变量来自makefile的变量.)


Pat*_*non 5

使用 RVM,在 OS X 上,我更改以下文件以实现 gcc 编译器的永久更改:

~/.rvm/rubies/ruby-1.X.Y/lib/ruby/1.X/i686-darwin10.8.0/rbconfig.rb
Run Code Online (Sandbox Code Playgroud)

在这个文件中,我发现了以下内容:

  CONFIG["configure_args"] = " ...' 'CC=/usr/bin/gcc-4.2'"

  CONFIG["CC"] = "/usr/bin/gcc-4.2"

  CONFIG["CPP"] = "/usr/bin/gcc-4.2 -E"
Run Code Online (Sandbox Code Playgroud)

我的机器上不再有这个 gcc-4.2 编译,只有 /usr/bin/gcc。用 gcc 替换 gcc-4.2 可以安装旧 gem。这是我在无法升级的旧环境中工作的时候。