2010-12-29 8 views
10

gem installに使用するコンパイラを指定するにはどうすればよいですか?バッシュで"gem install"のコンパイラを指定する方法は?

CC=gcc gem install ... 

私のシステムではまだsolaris studioを使用しているので、役に立たない。

+1

忘れてしまったのは、sqlite3-ruby -v1.2.5 gemです。 – Alex

答えて

8

sqlite3-rubyの場合、2011年1月コミット以降のメソッドがサポートされています。しかし、一般的に では、これを無効にすることはできません。なぜなら、rubygemsの動作のためです。それは

  1. 梱包を解凍します。

  2. &は、「extensions」属性(通常は特別に書かれたextconf.rbファイルへの パス)を使用していることを検出します。

  3. このファイルを実行してMakefileを生成します。明示的に のextconf.rbの作者がenv変数を尊重すると述べていない限り、それらは無視されます。あなたは変数でMakefileを生成します

    CC=gcc gem install sqlite3-ruby 
    

    extconf.rbはバッシュで実行した場合たとえば、sqlite3の-ルビー宝石の最新 バージョンでは、そのextconf.rbはは

    RbConfig::MAKEFILE_CONFIG['CC'] = ENV['CC'] if ENV['CC'] 
    

    ので、ラインを持っていますCCが に設定されています。gccに設定してください。

  4. Makefileが生成された後、rubygemsは、エクステンションをコンパイルするためにmakeユーティリティを実行します。

RubyGemsのは、私たちは、追加のコマンドラインをメイク用 パラメータを指定することが許可されている場合、理論的に、我々はその-eオプションを使用することができ、その後のすべてのextconf.rbはの 作者に依存しません。 (-eオプションは、メイクファイルから 変数を超える環境の優先順位から取られた変数を与えます。)RVMを使用して

2

、OS X上で、私は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" 

私はもはや私の箱だけは/ usr/binに/ gccの上で、このGCC-4.2コンパイルを持っています。 gccでgcc-4.2を置き換えると、古いgemをインストールするのに問題なく動作しました。これは、私がアップグレードできない古い環境で働いている最中です。

関連する問題