RbConfig 모듈

RbConfig 모듈

Ruby 인터프리터를 빌드할 때의 설정(configuration)을 저장해 두는 모듈이에요. ruby가 빌드될 때 mkconfig.rb가 이 파일을 만들어 주죠. mkmf가 호환되는 네이티브 확장(extension)을 만들 때 이 정보를 사용해요.

출처: Ruby 4.0 API

본문

RbConfig에 담긴 정보는 빌드 시점의 ruby에 관한 것이에요. 이 파일을 직접 고쳐도 다음에 ruby를 빌드하면 변경 내용이 사라지니, 읽기 전용 데이터라고 생각하는 게 맞아요.

상수 (Constants)

  • CONFIG: 저장된 설정 값들을 담고 있는 해시예요.
  • DESTDIR: make install 시의 DESTDIR 값이에요.
  • LIMITS: 몇몇 타입 크기와 관련된 한계 값을 담는 해시예요.
  • MAKEFILE_CONFIG: CONFIG와 거의 같지만, 아래처럼 다른 변수를 참조하는 형태를 가질 수 있어요.
  • SIZEOF: 각 기본 타입의 크기(byte 수)를 담는 해시예요.
  • TOPDIR: ruby가 설치된 디렉터리예요.

MAKEFILE_CONFIG는 이름 그대로 Makefile을 만들 때 쓰여요. 값들이 $(exec_prefix)/bin처럼 변수 참조 형태로 남아 있어서, 실제 경로는 expand로 풀어야 해요.

require 'rbconfig'

print <<-END_OF_MAKEFILE
prefix = #{RbConfig::MAKEFILE_CONFIG['prefix']}
exec_prefix = #{RbConfig::MAKEFILE_CONFIG['exec_prefix']}
bindir = #{RbConfig::MAKEFILE_CONFIG['bindir']}
END_OF_MAKEFILE

=> prefix = /usr/local
   exec_prefix = $(prefix)
   bindir = $(exec_prefix)/bin

RbConfig.expand는 위처럼 rbconfig 안에서 변수 참조를 해석할 때 사용돼요.

require 'rbconfig'
p RbConfig.expand(RbConfig::MAKEFILE_CONFIG["bindir"])
# => "/usr/local/bin"

Public Class Methods

expand(val, config = CONFIG)

RbConfig.expand(val)         -> string
RbConfig.expand(val, config) -> string

val에 들어 있는 변수 참조를 실제 값으로 확장(expand)해요.

RbConfig.expand("$(bindir)") # => /home/foobar/all-ruby/ruby19x/bin

ruby() → path

RbConfig.ruby -> path

현재 ruby 명령의 절대 경로를 반환해요.