如何指定gem install
应使用哪个编译器?在Bash中
CC=gcc gem install ...
没有帮助,因为它仍然在我的系统上使用solaris studio。
答案 0 :(得分:8)
对于sqlite3-ruby,自2011年1月提交以来支持您的方法。但总的来说 因为rubygems的工作原理,所以无法覆盖它。它
打开宝石包。
查看规格&发现它使用'extensions'属性 - 通常是a 特殊编写的extconf.rb文件的路径。
运行该文件以生成Makefile。除非extconf.rb的作者明确 据说尊重env变量,他们被忽略了。例如,最近 sqlite3-ruby gem的版本,其extconf.rb有一行
RbConfig::MAKEFILE_CONFIG['CC'] = ENV['CC'] if ENV['CC']
所以如果你在Bash中运行
CC=gcc gem install sqlite3-ruby
extconf.rb将生成包含变量CC
的Makefile
设置为gcc
或您想要的任何内容。
生成Makefile后,rubygems执行make
实用程序来编译
扩展
理论上,如果rubygems允许我们指定额外的命令行
make的参数,我们可以使用它的-e
选项然后不依赖
extconf.rb的作者。
(-e
选项提供从环境优先级获取的变量
来自makefile的变量。)
答案 1 :(得分:2)
在OS X上使用RVM,我更改了以下文件以实现gcc编译器的永久更改:
~/.rvm/rubies/ruby-1.X.Y/lib/ruby/1.X/i686-darwin10.8.0/rbconfig.rb
在此文件中,我发现了以下内容:
CONFIG["configure_args"] = " ...' 'CC=/usr/bin/gcc-4.2'"
CONFIG["CC"] = "/usr/bin/gcc-4.2"
CONFIG["CPP"] = "/usr/bin/gcc-4.2 -E"
我的盒子上不再有这个gcc-4.2编译,只有/ usr / bin / gcc。用gcc替换gcc-4.2可以安装旧的宝石。这是我在老环境中工作的时候,我无法升级。