如何获取Linux Ruby C扩展项目的包含目录(ruby.h)?

时间:2009-10-05 23:17:55

标签: c ruby linux

我正在使用scons构建基于linux C的ruby扩展。获得包含路径的“正确”方法是什么? “对”,我的意思是它在1.9和1.8上开箱即用。

我不想使用mkmf / Makefile解决方案。

谢谢!戴夫

1 个答案:

答案 0 :(得分:1)

如果你使用autoconf,你可以从米饭中借用ruby.ac:

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

或者由于您使用的是其他构建系统,因此可以复制其行为。总结它的作用:

  1. 我们使用rbconfig模块来获取ruby配置变量,如下所示:   
    $RUBY -rrbconfig -e "puts(Config::CONFIG['$1'] || '')" <variable>
    其中$ RUBY是ruby解释器(有时解释器安装有不同的名称,例如ruby1.8或ruby1.9)和&lt; variable&gt;是所需的配置变量
  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并链接到Windows上的一键安装程序(以前用vc6构建;我不确定它是否仍然存在) 。