Как указать компилятор для "gem install"? - PullRequest
11 голосов
/ 29 декабря 2010

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

CC=gcc gem install ...

не помогает, потому что он все еще использует Solaris Studio в моей системе.

Ответы [ 2 ]

8 голосов
/ 05 августа 2011

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

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

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

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

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

2 голосов
/ 03 мая 2016

Используя 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 работала нормально для установки старого гема. Пока я работаю в старой среде, я не могу обновиться.

...