methods=Kernel/i.xsystem.mkmf,Kernel/i.xpopen.mkmf,Kernel/i.log_src.mkmf,Kernel/i.create_tmpsrc.mkmf,Kernel/i.have_devel=3f.mkmf,Kernel/i.try_do.mkmf,Kernel/i.link_command.mkmf,Kernel/i.cc_command.mkmf,Kernel/i.cpp_command.mkmf,Kernel/i.libpathflag.mkmf,Kernel/i.with_werror.mkmf,Kernel/i.rm_f.mkmf,Kernel/i.rm_rf.mkmf,Kernel/i.modified=3f.mkmf,Kernel/i.merge_libs.mkmf,Kernel/i.try_link.mkmf,Kernel/i.try_cpp.mkmf,Kernel/i.egrep_cpp.mkmf,Kernel/i.try_run.mkmf,Kernel/i.install_rb.mkmf,Kernel/i.have_macro.mkmf,Kernel/i.have_library.mkmf,Kernel/i.find_library.mkmf,Kernel/i.find_header.mkmf,Kernel/i.have_func.mkmf,Kernel/i.have_header.mkmf,Kernel/i.have_struct_member.mkmf,Kernel/i.have_type.mkmf,Kernel/i.find_type.mkmf,Kernel/i.have_var.mkmf,Kernel/i.check_sizeof.mkmf,Kernel/i.with_config.mkmf,Kernel/i.enable_config.mkmf,Kernel/i.create_header.mkmf,Kernel/i.dir_config.mkmf,Kernel/i.create_makefile.mkmf,Kernel/i.find_executable.mkmf,Kernel/i.dummy_makefile.mkmf,Kernel/i.try_compile.mkmf,Kernel/i.try_static_assert.mkmf,Kernel/i.try_constant.mkmf,Kernel/i.try_func.mkmf,Kernel/i.try_var.mkmf,Kernel/i.try_type.mkmf,Kernel/i.install_files.mkmf,Kernel/i.message.mkmf,Kernel/c.CONFIG.mkmf,Kernel/v.srcdir.mkmf,Kernel/v.libdir.mkmf,Kernel/v.archdir.mkmf,Kernel/v.sitelibdir.mkmf,Kernel/v.sitearchdir.mkmf,Kernel/v.hdrdir.mkmf,Kernel/v.topdir.mkmf,Kernel/v.defs.mkmf,Kernel/v.libs.mkmf,Kernel/v.CFLAGS.mkmf,Kernel/v.LDFLAGS.mkmf
sublibraries=
requires=
classes=
is_sublibrary=false

Ruby γĥ饤֥Τ Makefile 饤֥Ǥ

Υ饤֥̾extconf.rb Ȥ̾ ruby ץȤ require ޤ
 extconf.rb ¹Ԥ Makefile ΤǤ

extconf.rb ν񤭤ˤĤƤϡ
Ruby Υ֤˴ޤޤ README.EXT (ܸǤ README.EXT.ja)
⻲ȤƤ

Υ饤֥Ǥ extconf.rb 򵭽ҤΤͭѤʥ᥽åɤƤޤ
إåե¸ߥå饤֥¸ߥåʤɡ
ƥ֤κۤĴ٥ƥŬ Makefile 뤿
Υ᥽åɤɬפȤʤޤ

=== Ȥ

Ͷγĥ饤֥ foo.so 뤳Ȥͤޤ
γĥ饤֥뤿ˤϡ
إåե bar.h ȥ饤֥ libbar.a δؿ baz() ɬפȤޤ
Τ extconf.rb ϰʲΤ褦˽񤭤ޤ

  require 'mkmf'

  dir_config('bar')
  if have_header('bar.h') and have_library('bar', 'baz')
    create_makefile('foo')
  end

ĥ饤֥ foo.so 󥹥ȡ뤹ˤϰʲΤ褦ˤޤ

  $ ruby extconf.rb
  $ make
  $ make site-install

foo.so  extconf.rb Ǥ dir_config('bar') ¹ԤƤΤǡ
桼ϰʲΤ褦˥ޥɥ饤󥪥ץ --with-bar-dir
ʤɤȤäơإåեΥѥ饤֥ΥѥǤޤ

  $ ruby extconf.rb --with-bar-include=/usr/local/include \
                    --with-bar-lib=/usr/local/lib

  ޤ

  $ ruby extconf.rb --with-bar-dir=/usr/local

dir_config ؿξܺ٤ˤĤƤ
[[m:Kernel.#dir_config]] 򻲾ȤƤ

=== configure ץ

configure ץȤ Ruby 󥿥ץ꥿Υѥ˻ꤵ줿
configure ץȤΥץ
ޤ extconf.rb ¹ԻΥץΤȤǤ

extconf.rb κԤǤդΥץǤޤ
[[m:Kernel.#arg_config]] ⻲ȤƤ

ޤʲΥץ󤬥ǥեȤѲǽǤ

: --with-opt-include=DIR
    إåեõǥ쥯ȥ DIR ɲäޤ

: --with-opt-lib=DIR
    饤֥եõǥ쥯ȥ DIR ɲäޤ

: --with-opt-dir=DIR

    إåե롢饤֥եõǥ쥯ȥ
    DIR/includeDIR/lib 򤽤줾ɲäޤ

: --with-TARGET-include=DIR

    إåեõǥ쥯ȥ DIR ɲäޤ

    extconf.rb  dir_config(TARGET)
    ¹ԤƤФΥץǤޤ

: --with-TARGET-lib=DIR

    饤֥õǥ쥯ȥ DIR ɲäޤ

    extconf.rb  dir_config(TARGET)
    ¹ԤƤФΥץǤޤ

: --with-TARGET-dir=DIR

    إåե롢饤֥եõǥ쥯ȥ
    DIR/includeDIR/lib 򤽤줾ɲäޤ

    extconf.rb  dir_config(TARGET)
    ¹ԤƤФΥץǤޤ

=== depend ե

ȥǥ쥯ȥ depend Ȥ̾Υե뤬硢
 Makefile κǸ depend եƤɲäޤ

depend եϥեΰ¸ط򵭽Ҥ뤿˻Ȥޤ
㤨гĥ饤֥Υ foo.c  foo.h 򥤥󥯥롼ɤƤ硢
foo.h 줿Ȥˤ foo.c ƥѥ뤷Ǥ礦
Τ褦ʰ¸ط򵭽Ҥˤ depend ե˰ʲ 1 Ԥ񤭤ޤ

  foo.o: foo.c foo.h

Τ褦˽񤯤ȡfoo.o  foo.c  foo.h ˰¸Ƥ뤳Ȥ򼨤ޤ
Ĥޤꡢfoo.c  foo.h Τɤ餫줿
foo.o ꥳѥ뤵褦ˤʤޤ

C ѥˤäƤϡΤ褦ʵҤưǤޤ
̤ˡΤΥץϡ-MפǤ
-Mץץ C ѥȤäƤϡ
ʲΥޥɤ¹ԤŬڤ depend Ǥޤ

  $ cc -M *.c > depend

gcc ˤϡ-M ץ -MM Ȥץ⤢ޤ
Υץϡ̾ﹹ뤳ȤΤʤ stdio.h ʤɡ
ƥΥإåե¸ط˴ޤޤ
 -MM ץǤϡ#include <...>פηǻȤ
إåե򥷥ƥΥإåեȤߤʤƤ褦Ǥ

gcc  -MM ץȤϡ
ʲΥޥɤ¹ԤŬڤ depend Ǥޤ

  $ gcc -MM *.c > depend

ʤdepend ե¸طεҰʳ˻Ȥ٤ǤϤޤ
mkmf.rb  depend ե Makefile Ϣ뤹Ȥˡ
Ƥù礬뤫Ǥ

=== extconf.rb  make å

extconf.rb  Makefile ˤϰʲΥåȤƤޤ

: all
    ĥ饤֥ޤ

: clean
    ĥ饤֥ꡢ֥ȥեʤɤޤ

: distclean
: realclean
    clean åȤե˲äơ
    Makefile, extconf.h, core, ruby ʤɤޤ

: install
: site-install
    ĥ饤֥ $sitearchdir ˥󥹥ȡ뤷ޤ
    ȥǥ쥯ȥ˥ǥ쥯ȥ lib 
    ۲ ruby ץ (*.rb ե) 
    ǥ쥯ȥ곬ؤݤäޤ $sitelibdir ˥󥹥ȡ뤷ޤ
