如何为“gem install”指定编译器?

时间:2010-12-29 14:14:15

标签: compiler-construction gem

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

CC=gcc gem install ...

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

2 个答案:

答案 0 :(得分:8)

对于sqlite3-ruby,自2011年1月提交以来支持您的方法。但总的来说 因为rubygems的工作原理,所以无法覆盖它。它

  1. 打开宝石包。

  2. 查看规格&发现它使用'extensions'属性 - 通常是a 特殊编写的extconf.rb文件的路径。

  3. 运行该文件以生成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或您想要的任何内容。

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

  5. 理论上,如果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可以安装旧的宝石。这是我在老环境中工作的时候,我无法升级。