Как получить включаемые каталоги (ruby.h) для проекта расширения Linux Ruby C? - PullRequest
1 голос
/ 06 октября 2009

Я использую scons для создания расширения ruby ​​на основе linux C. Каков «правильный» способ получить правильные пути включения? Под «правильным» я подразумеваю, что он работает из коробки на 1.9 и 1.8.

Я не хочу использовать решение mkmf / Makefile.

Спасибо! Dave

1 Ответ

1 голос
/ 05 января 2010

Если вы используете autoconf, вы можете позаимствовать ruby.ac из риса:

http://github.com/jameskilton/rice/blob/master/ruby.ac

или поскольку вы используете другую систему сборки, вы можете продублировать ее поведение. Подводя итог, что он делает:

  1. Мы используем модуль rbconfig для получения переменных конфигурации ruby: <pre>$RUBY -rrbconfig -e "puts(Config::CONFIG['$1'] || '')" <variable> где $ RUBY - интерпретатор ruby ​​(иногда интерпретаторы устанавливаются с другим именем, например ruby1.8 или ruby1.9), а - требуемая переменная конфигурации
  2. Затем мы устанавливаем наши переменные сборки:
    
      if ${ruby_config_rubyhdrdir} is empty: (e.g. ruby 1.8)
        CPPFLAGS="-I${ruby_config_archdir}
      else:
        CPPFLAGS="-I${ruby_config_rubyhdrdir} ${ruby_config_rubyhdrdir}/${arch}
    
      CFLAGS="${ruby_config_CFLAGS} ${ruby_config_CCDLFLAGS}"
    
      LDFLAGS="-L${ruby_config_archdir} -L${ruby_config_libdir} ${ruby_config_LDFLAGS}"
    
      LIBS="${ruby_config_LIBS} ${ruby_config_DLDLIBS}"
    
    где переменные $ {ruby_config_ *} определяются с помощью приведенной выше команды config, например: ruby_config_foo=$RUBY -rrbconfig -e "puts(Config::CONFIG['$1'] || '')" foo
  3. Нам также нужно связаться с библиотекой ruby, поэтому мы добавляем $ {ruby_config_LIBRUBYARG}.
  4. Перечисленные выше переменные предназначены для компиляции и компоновки; Вам также может понадобиться установить. Файлы библиотеки Ruby должны быть установлены в $ {ruby_config_sitelibdir}. Расширения Ruby должны быть установлены в $ {ruby_config_sitearchdir}.
  5. В ruby.ac также есть какая-то магия для сборки с помощью mingw и связывания с установщиком одним щелчком мыши на окнах (который раньше собирался с vc6; я не уверен, так оно и есть).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...