Как указать компилятор для "gem install"?

Как я могу указать, какой компилятор следует использовать для gem install? В Bash

CC=gcc gem install ...

не помогает, потому что он по-прежнему использует студию solaris в моей системе.

Ответ 1

Для sqlite3-ruby ваш метод поддерживается с января 2011 года. Но в основном невозможно переопределить это из-за того, как работает rubygems. Это

  • Распакует драгоценный камень.

  • Входит в спецификацию и обнаруживает, что использует атрибут 'extensions' - обычно путь к специально написанному файлу 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 будет генерировать Makefile с переменной CC в ней, которая установите gcc или что угодно.

  • После создания Makefile rubygems выполняет утилиту make для компиляции расширение.

Теоретически, если rubygems позволили нам указать дополнительную командную строку параметры для make, мы могли бы использовать его опцию -e, а затем не зависеть от авторы extconf.rb вообще. (-e параметр дает переменные, взятые из приоритета среды над переменные из make файлов.)

Ответ 2

Используя RVM, в 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"

У меня больше нет компиляции gcc-4.2 на моем ящике, только /usr/bin/gcc. Замена gcc-4.2 на gcc работала нормально для установки старого драгоценного камня. Это пока я заезжал в угол, работая в старой среде, которую я не могу обновить.