Ale*_*lex 11 compiler-construction gem
如何指定应该使用哪个编译器gem install?在Bash
CC=gcc gem install ...
Run Code Online (Sandbox Code Playgroud)
没有帮助,因为它仍然在我的系统上使用solaris studio.
对于sqlite3-ruby,自2011年1月提交以来支持您的方法.但总的来说,由于rubygems的工作原理,不可能覆盖它.它
打开宝石包装.
调查它并发现它使用'extensions'属性 - 通常是特殊编写的extconf.rb文件的路径.
运行该文件以生成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或您想要的任何变量.
生成Makefile后,rubygems执行make实用程序来编译扩展.
从理论上讲,如果rubygems允许我们为make指定其他命令行参数,我们可以使用它的-e选项,然后根本不依赖于extconf.rb的作者.(-e选项提供从环境优先于变量来自makefile的变量.)
使用 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。这是我在无法升级的旧环境中工作的时候。