์˜์–ดํ”„๋ž‘์Šค์–ด์ŠคํŽ˜์ธ์–ด

Ad


์˜จ์›์Šค ํŒŒ๋น„์ฝ˜

makepp_extending - ํด๋ผ์šฐ๋“œ์—์„œ์˜ ์˜จ๋ผ์ธ

Ubuntu Online, Fedora Online, Windows ์˜จ๋ผ์ธ ์—๋ฎฌ๋ ˆ์ดํ„ฐ ๋˜๋Š” MAC OS ์˜จ๋ผ์ธ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ํ†ตํ•ด OnWorks ๋ฌด๋ฃŒ ํ˜ธ์ŠคํŒ… ์ œ๊ณต์—…์ฒด์—์„œ makepp_extending์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ Ubuntu Online, Fedora Online, Windows ์˜จ๋ผ์ธ ์—๋ฎฌ๋ ˆ์ดํ„ฐ ๋˜๋Š” MAC OS ์˜จ๋ผ์ธ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๋ฌด๋ฃŒ ์˜จ๋ผ์ธ ์›Œํฌ์Šคํ…Œ์ด์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ OnWorks ๋ฌด๋ฃŒ ํ˜ธ์ŠคํŒ… ์ œ๊ณต์—…์ฒด์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” makepp_extending ๋ช…๋ น์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ:

์ด๋ฆ„


makepp_extending -- Perl์„ ์‚ฌ์šฉํ•˜์—ฌ makepp๋ฅผ ํ™•์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•

๊ธฐ์ˆ 


Makepp์€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ถฉ๋ถ„ํžˆ ์œ ์—ฐํ•˜๋ฏ€๋กœ ์•ฝ๊ฐ„์˜ Perl ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ธฐํƒ€ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜ ๋…ธํŠธ on ์“ฐ๊ธฐ ํŽ„ ์•”ํ˜ธ ์— ์ผ ๊ณผ ๋ฉ”์ดํฌ์—…
๊ฐ ๋ฉ”์ดํฌํŒŒ์ผ์€ ์ž์ฒด ํŒจํ‚ค์ง€์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•˜๋‚˜์˜ makefile์— ์žˆ๋Š” ์ •์˜๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ makefile์˜ ์ •์˜. ๋ชจ๋“  ํ‘œ์ค€์„ ํฌํ•จํ•œ ๊ณตํ†ต ๊ธฐ๋Šฅ ์„ธํŠธ
ํ…์ŠคํŠธ ์กฐ์ž‘ ๊ธฐ๋Šฅ์€ ํŒจํ‚ค์ง€๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ํŒจํ‚ค์ง€๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

Makefile ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น ํŒจํ‚ค์ง€์— Perl ์Šค์นผ๋ผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. (์˜ˆ์™ธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ: ์ž๋™ ๋ณ€์ˆ˜์™€ CC์™€ ๊ฐ™์€ ๋ณ€์ˆ˜์˜ ๊ธฐ๋ณธ๊ฐ’์€ ์‹ค์ œ๋กœ
์ธ์ˆ˜๊ฐ€ ์—†๋Š” ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์ƒ ํŠน์ • ๋ณ€์ˆ˜, ๋ช…๋ น์ค„ ๋ณ€์ˆ˜ ๋ฐ
ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ์ด๋Ÿฐ ์‹์œผ๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.) ๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ๋ถ„์ด ์ž‘์„ฑํ•˜๋Š” ๋ชจ๋“  Perl ์ฝ”๋“œ๋Š” ๋ชจ๋“  ๋ณ€์ˆ˜์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฉ”์ดํฌํŒŒ์ผ ๋ณ€์ˆ˜. ์ „์—ญ ๋ณ€์ˆ˜๋Š” "Mpp::global" ํŒจํ‚ค์ง€์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋ณด๋‹ค
์ž์„ธํ•œ ๋‚ด์šฉ์€ Makefile ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

๊ฐ ๋ช…๋ น๋ฌธ(ifperl / ifmakeperl, perl / makeperl, sub / makesub)์€
ํ•จ์ˆ˜(perl/makeperl, map/makemap) ๋ฐ ๊ทœ์น™ ์ž‘์—…(perl/makeperl)
Makefile์— Perl ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ์ ˆ๋Œ€์ ์œผ๋กœ
์ผ๋ฐ˜์ ์ธ Perl์—์„œ๋Š” ๋‹ค์Œ ์„น์…˜์— ์„ค๋ช…๋œ ๋Œ€๋กœ "f_" ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
makepp ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋ณ€ํ˜•์€ ๋จผ์ € ๋ช…๋ น๋ฌธ์„ ๋‹ค์Œ์„ ํ†ตํ•ด ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
Make ์Šคํƒ€์ผ ๋ณ€์ˆ˜ ํ™•์žฅ์€ Perl์ด ๋ณด๊ธธ ์›ํ•˜๋Š” "$"๋ฅผ ๋‘ ๋ฐฐ๋กœ ๋Š˜๋ ค์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

makepp์˜ ๊ฑฐ๋Œ€ํ•œ(๋นŒ๋“œ ์‹œ์Šคํ…œ์— ๋”ฐ๋ผ) ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ข… ์ฒ˜๋ฆฌ๊ฐ€ ํŠน๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
๊ตฌ์กฐ๋Š” ์ •์ƒ์ ์ธ ์ข…๋ฃŒ๋กœ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์— ๋ช‡ ์ดˆ๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š”
๋ฌด์ฐจ๋ณ„ ์ถœ๊ตฌ. ๊ธฐ๋ณธ ํ”„๋กœ์„ธ์Šค์—๋Š” ์—ฌ์ „ํžˆ "END" ๋ธ”๋ก์ด ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ,
์ „์—ญ ํŒŒ์ผ ํ•ธ๋“ค์€ ํ”Œ๋Ÿฌ์‹œ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ˜„๋Œ€ ์–ดํœ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚  ๋•Œ ์ œ๋Œ€๋กœ ๋‹ซํžˆ๋Š” ํŒŒ์ผ ํ•ธ๋“ค.

Perl ์ฝ”๋“œ์—์„œ๋Š” ๊ทœ์น™ ์ž‘์—…์œผ๋กœ ์ง์ ‘ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ์ •์˜ํ•œ ๋ช…๋ น์„ ํ†ตํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
๋ฐ˜๋Œ€. "END" ๋ธ”๋ก์€ ์‹คํ–‰๋˜์ง€ ์•Š์ง€๋งŒ ์ „์—ญ ํŒŒ์ผ ํ•ธ๋“ค์€ ํ”Œ๋Ÿฌ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋งŒํผ
์ „์—ญ ๊ฐœ์ฒด์˜ "DESTROY"๋Š” ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฒจ๊ฐ€ ํ…์ŠคํŠธ ๊ธฐ๋Šฅ
๊ฐ„๋‹จํžˆ ๋‹ค์Œ๊ณผ ๊ฐ™์€ Perl ์„œ๋ธŒ๋ฃจํ‹ด์„ ์ •์˜ํ•˜์—ฌ makepp์˜ ๋ ˆํผํ† ๋ฆฌ์— ์ƒˆ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฆ„์€ ๊ฐ™์ง€๋งŒ ์ ‘๋‘์‚ฌ "f_"๊ฐ€ ๋ถ™์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

ํ•˜์œ„ f_myfunc {
๋‚ด $argument = &arg; # ์ธ์ˆ˜์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
my( undef, $mkfile, $mkfile_line ) = @_; # ์ธ์ˆ˜์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

... ์—ฌ๊ธฐ์„œ ๋ญ”๊ฐ€ ํ•ด๋ณด์„ธ์š”

$return_value๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
}

XYZ := $(myfunc ๋‚ด func ์ธ์ˆ˜)

ํ•จ์ˆ˜์— ์ธ์ˆ˜๊ฐ€ ์—†์œผ๋ฉด ์•„๋ฌด ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๊ธฐ๋Šฅ์ด ํ•˜๋‚˜๋ฅผ ์ทจํ•˜๋Š” ๊ฒฝ์šฐ
์ธ์ˆ˜๋ฅผ ์–ป์œผ๋ ค๋ฉด ์œ„์˜ ์˜ˆ์—์„œ์™€ ๊ฐ™์ด ๊ฐ„๋‹จํ•œ ์ ‘๊ทผ์ž &arg๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ๋งŒ์•ฝ ๋„ˆ๋ผ๋ฉด
๋” ๋งŽ์€ ์ธ์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๋ฉด ์•„๋ž˜์— ์„ค๋ช…๋œ ๋” ๋ณต์žกํ•œ ์ ‘๊ทผ์ž "args"๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ ‘๊ทผ์ž๋Š” "f_"์— ์ „๋‹ฌ๋˜์–ด์•ผ ํ•˜๋Š” ๋™์ผํ•œ ์„ธ ๊ฐ€์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
ํ•จ์ˆ˜, ์ฆ‰ ํ•จ์ˆ˜ ์ธ์ˆ˜, makefile ๊ฐ์ฒด ๋ฐ ๋ผ์ธ ์„ค๋ช…์ž
๋ฉ”์‹œ์ง€. ๋”ฐ๋ผ์„œ ์ฒซ ๋ฒˆ์งธ ๊ฒฝ์šฐ์—๋Š” ํšจ์œจ์ ์ธ &arg ํ˜•์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

&arg ์ ‘๊ทผ์ž๋Š” ๋‹ค์Œ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ธ์ˆ˜๊ฐ€ ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ
ํ™•์žฅ๋จ(์˜ˆ: "$(my$(function) arg)"์—์„œ ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์ฐพ์œผ๋ ค๋ฉด ์ธ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋ฌธ์ž์—ด๋กœ ์ „๋‹ฌ๋˜์–ด ๋ฐฉ๊ธˆ ๋ฐ˜ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋…ผ์ฆ์ด ์—ฌ์ „ํžˆ ํ™•์žฅ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด, ์ด๊ฒƒ์€
์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์—๋Š” ๋Œ€์‹  ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค. &arg ์ ‘๊ทผ์ž๋Š” ์ด๋ฅผ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.
๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ makefile ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ณ€์ˆ˜ ๋ฒˆํ˜ธ๋กœ ๋” ๋งŽ์€ ์ธ์ˆ˜๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ž‘์—…์€ "args"์— ์˜ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.
์ด ์ ‘๊ทผ์ž๋Š” arg์™€ ๋™์ผํ•œ 3๊ฐœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ถ”๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

max: ์ธ์ˆ˜ ์ˆ˜(๊ธฐ๋ณธ๊ฐ’ 2): ๋ฌดํ•œ์˜ ๊ฒฝ์šฐ ~0(maxint) ์ œ๊ณต
min: ์ธ์ˆ˜ ์ˆ˜(max๊ฐ€ ~0์ด๋ฉด ๊ธฐ๋ณธ๊ฐ’์€ 0์ด๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด max์™€ ๋™์ผ)
only_comma: ํŒŒ์ผ ์ด๋ฆ„์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์‰ผํ‘œ ์ฃผ์œ„์— ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

ํ™•์žฅ ์ „์— ์กด์žฌํ•˜๋Š” ์ตœ๋Œ€ ์ตœ๋Œ€, ์ตœ์†Œ ์ตœ์†Œ ์‰ผํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค.
์ธ์ˆ˜. makepp ๋‚ด์žฅ ํ•จ์ˆ˜์˜ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ:

my( $prefix, $text ) = args $_[0], $_[1], $_[2], 2, 2, 1; # ์ ‘๋‘์‚ฌ ์ถ”๊ฐ€
for my $cond ( args $_[0], undef, $_[2], ~0 ) ... # ๊ทธ๋ฆฌ๊ณ , ๋˜๋Š”
๋‚ด @args= args $_[0], $_[1], $_[2], ~0, 1, 1; # ๋ถ€๋ฅด๋‹ค
my( $filters, $words ) = args $_[0], $_[1], $_[2]; # ํ•„ํ„ฐ

ํ•จ์ˆ˜๋Š” ์Šค์นผ๋ผ ๋ฌธ์ž์—ด(๋ฐฐ์—ด์ด ์•„๋‹˜)์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋ฉฐ, ์ด ๋ฌธ์ž์—ด์€
๊ทธ ์‹œ์ ์— ๋ฌธ์ž๋ฅผ ๋ณด๋‚ด์„ธ์š”.

ํ•จ์ˆ˜์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ผ๋ฐ˜์ ์ธ Perl die ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ makepp์— ์˜ํ•ด ํŠธ๋žฉ๋˜๋ฉฐ ํŒŒ์ผ ์ด๋ฆ„๊ณผ ํ–‰์„ ํ‘œ์‹œํ•˜๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚จ ํ‘œํ˜„์‹์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ธ์‡„๋ฉ๋‹ˆ๋‹ค.

ํ•จ์ˆ˜๊ฐ€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์— ์•ก์„ธ์Šคํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
์‰˜ ๋ช…๋ น ๋“ฑ

ํ˜„์žฌ ์ข…์†์„ฑ ๋ฐ ๊ทœ์น™ ์ž‘์—…์— ๋‚˜ํƒ€๋‚˜๋Š” ํ‘œํ˜„์ด ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค.
๋Œ€์ƒ์— ๋‚˜ํƒ€๋‚˜๋Š” ํ‘œํ˜„์‹์€ ๋‘ ๋ฒˆ ํ™•์žฅ๋˜๋ฏ€๋กœ ์ฃผ์˜ํ•˜์„ธ์š”.
ํ•จ์ˆ˜์—๋Š” ๋ถ€์ž‘์šฉ์ด ์žˆ์œผ๋ฉฐ ๋Œ€์ƒ์— ๋Œ€ํ•œ ํ‘œํ˜„์‹์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

ํ•จ์ˆ˜๊ฐ€ ํ‰๊ฐ€ํ•˜๋Š” ํ™˜๊ฒฝ(ํŠนํžˆ cwd)์€
Makefile์˜ ๊ทœ์น™์ด ์ ์šฉ๋˜๋Š” ํ™˜๊ฒฝ๊ณผ ๋ฐ˜๋“œ์‹œ โ€‹โ€‹์ผ์น˜ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
ํ‰๊ฐ€๋œ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‹น์‹ ์—๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค๋ฉด, ๋‹น์‹ ์˜ ๊ธฐ๋Šฅ์€
์•„๋งˆ๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค :

ํ•˜์œ„ f_foo {
...
chdir $makefile->{CWD};

... ๋“ฑ
}

์ž…๊ณ  ๊ธฐ๋Šฅ ์œผ๋กœ a ํŽ„ ๋ชจ๋“ˆ
ํฌํ•จ ํŒŒ์ผ์— ํ•จ์ˆ˜๋ฅผ ๋„ฃ์œผ๋ฉด Makeppfile๋‹น ํ•˜๋‚˜์˜ ๋ณต์‚ฌ๋ณธ์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด "Exporter"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ฐ˜ Perl ๋ชจ๋“ˆ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ ํƒํ•˜๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋กœ๋“œ ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๊ณ  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค.

Perl { mymodule ์‚ฌ์šฉ }
ํŽ„ {
my::๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์„ธ์š”. # put : ๊ทœ์น™์œผ๋กœ ํ•ด์„๋˜์ง€ ์•Š๋„๋ก ์ƒˆ ์ค„์— ๋„ฃ์Šต๋‹ˆ๋‹ค.
}

Makefile์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜(์˜ˆ: "f_")๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ
ํ•จ์ˆ˜, "arg" ๋˜๋Š” "args"), ๋‹ค์Œ ์ค„์„ ๋ชจ๋“ˆ์— ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Mpp::Subs๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

๋‹จ์ ์€ ๋ชจ๋“ˆ์ด ํ•จ์ˆ˜์™€ ์ง์ ‘์ ์œผ๋กœ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์— ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
makefile์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ๊ฒƒ์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
Perl์˜ "ํ˜ธ์ถœ์ž" ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

ํ˜ธ์ถœ ์™ธ๋ถ€ ํŽ„ ์Šคํฌ๋ฆฝํŠธ
"์‹œ์Šคํ…œ"์„ ํ†ตํ•ด ๋˜๋Š” ๊ทœ์น™ ์ž‘์—…์œผ๋กœ ์™ธ๋ถ€ Perl ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด makepp๋Š”
์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค(๋งˆ์ง€๋ง‰ ๊ทœ์น™ ์ž‘์—…์ด ์•„๋‹Œ ํ•œ)๋ฅผ ๋งŒ๋“ค๊ณ  ์ƒˆ๋กœ์šด Perl ํ•ด์„๊ธฐ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๋” ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๋ฉด ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

&๋ช…๋ น ์ธ์ˆ˜...
์ด๋Š” ๊ทœ์น™ ์กฐ์น˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค ๋ช…๋ น "c_" ์ ‘๋‘์–ด๊ฐ€ ์žˆ๊ณ ,
๋‚˜๋จธ์ง€(์„ ํƒ์ ์œผ๋กœ makepp ์Šคํƒ€์ผ๋กœ ์ธ์šฉ๋จ - ์ •ํ™•ํžˆ ๋™์ผํ•˜์ง€๋Š” ์•Š์Œ)๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
Shell) ์ธ์ˆ˜. ๊ทธ๋Ÿฌํ•œ ํ•จ์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์œผ๋ฉด ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ๋‹ค์Œ์œผ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
"๋‹ฌ๋ฆฌ๋‹ค".

ํ•˜์œ„ c_mycmd { ๋‚ด @args = @_; ... }

$(๊ฐ€์งœ ์ „ํ™” cmd):
&mycmd '๊ณต๋ฐฑ์ด ์žˆ๋Š” ์ธ์ˆ˜' arg2 "arg3" # c_mycmd๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

%.์•„์›ƒ: %.in
&myscript -o $(output) $(input) # ์™ธ๋ถ€ myscript ํ˜ธ์ถœ

๋‚ด์žฅ ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด์—์„œ ๋ช…๋ น์„ ์ž‘์„ฑํ•˜์—ฌ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ์กด๊ณผ ๋™์ผํ•œ ํ‘œ์ค€ ์˜ต์…˜๊ณผ I/O ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ธ”๋ก ์—ฐ์‚ฐ์ž "Mpp::Cmds::frame" ๋’ค์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ์ผ ๋ฌธ์ž ์˜ต์…˜ ๋ชฉ๋ก์ด ์˜ต๋‹ˆ๋‹ค.
๋‚ด์žฅ(์ตœ๋Œ€ "qw(fi I โ€‹โ€‹o O rs)"). ์˜ต์…˜์„ ์ง์ ‘ ์ง€์ •ํ•˜๋”๋ผ๋„
์ด๋“ค ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ฌด์‹œํ•ด๋„ ์—ฌ์ „ํžˆ ํ‘œ์ค€ ์˜ต์…˜์˜ ๋‹จ์ผ ๋ฌธ์ž๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

๊ฐ๊ฐ์˜ ๊ณ ์œ  ์˜ต์…˜์€ "[qw(n ์ด๋ฆ„), \$ref, ์ธ์ˆ˜, ๋ณด๊ฒฐ]". ์ฒ˜์Œ ๋‘
์š”์†Œ๋Š” ์งง์€ ์ด๋ฆ„๊ณผ ๊ธด ์ด๋ฆ„์ด๋ฉฐ ๊ทธ ๋’ค์— ๋ณ€์ˆ˜ ์ฐธ์กฐ๊ฐ€ ์˜ค๊ณ  ์„ ํƒ์ ์œผ๋กœ
์ธ์ˆ˜๋ฅผ ์ทจํ• ์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ๋ถ€์šธ์ž…๋‹ˆ๋‹ค. ์ธ์ˆ˜๊ฐ€ ์—†์œผ๋ฉด ๋ณ€์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์˜ต์…˜์ด ์ œ๊ณต๋  ๋•Œ๋งˆ๋‹ค ์ฆ๊ฐ€ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์˜ต์…˜ ๊ฐ’์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

sub c_my_ocmd { # ์ผ๋ฐ˜์ ์ธ ์ถœ๋ ฅ ์‚ฌ๋ก€
๋กœ์ปฌ @ARGV = @_;
Mpp::Cmds::ํ”„๋ ˆ์ž„ {

... ์˜ต์…˜์ด ์ด๋ฏธ ์ž๋™์œผ๋กœ ์ œ๊ฑฐ๋œ ์ƒํƒœ์—์„œ @ARGV๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๊ธฐ์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.

} 'f', qw(o O);
}

sub c_my_icmd { # 2๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ๋Š” ์ผ๋ฐ˜์ ์ธ ์ž…๋ ฅ ์‚ฌ๋ก€
๋กœ์ปฌ @ARGV = @_;
๋‚ด( $์งง์€, $๊ธด );
Mpp::Cmds::ํ”„๋ ˆ์ž„ {

... ์—ฌ๊ธฐ์„œ <>๋กœ ๋ญ”๊ฐ€๋ฅผ ํ•ด๋ณด์„ธ์š”

} qw(i I rs), # s๋Š” -s๊ฐ€ ์•„๋‹Œ --separator๋งŒ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
[qw(s short), \$short], # ์˜ต์…˜ ์ธ์ˆ˜ ์—†์Œ -> $short == 1
[qw(l long), \$long, 1, sub { ๊ฒฝ๊ณ  "์ธ์ˆ˜ $long์ด ์žˆ์Œ"}];
}

๋‹ค์Œ์€ ๊ฐ ์ž…๋ ฅ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋งŒ ๋Œ€๋ฌธ์ž๋กœ ๋ฐ”๊พธ๋Š” ๊ฐ„๋‹จํ•œ ๋ช…๋ น์ž…๋‹ˆ๋‹ค.
๋ ˆ์ฝ”๋“œ("&sed '$$_ = "\u\L$$_"'"์™€ ๋™์ผ):

ํ•˜์œ„ c_uc {
๋กœ์ปฌ @ARGV = @_;
Mpp::Cmds::ํ”„๋ ˆ์ž„ {
<> ๋™์•ˆ "\u\L$_"์„ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค;
} 'f', qw(i I o O rs);
}

ํ”„๋ ˆ์ž„๋ณ„๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๋ธ”๋ก ๋‚ด์—์„œ๋Š” ์ค‘์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ค‘์ฒฉ๋œ ๋ธ”๋ก์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ํŒŒ์ผ์„ ์—ฌ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ž‘์—….

Mpp::Cmds::perform { ... } '๋ฉ”์‹œ์ง€';

์ด๋Š” "--verbose"(๋ชจ๋“  ๋ช…๋ น์ด ํ—ˆ์šฉํ•˜๋Š”) ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
๋ช…๋ น์ด ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ธ”๋ก์ด ๊ฑฐ์ง“์œผ๋กœ ํ‰๊ฐ€๋˜๋ฉด ๋ธ”๋ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฃฝ์Šต๋‹ˆ๋‹ค.
๋ถ€์ •๋œ ๋ฉ”์‹œ์ง€.

์šด์˜ ์Šคํฌ๋ฆฝํŠธ ์ธ์ˆ˜...
์ด๊ฒƒ์€ makefile ๋‚ด์˜ Perl ์ปจํ…์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ฐ˜์ ์ธ Perl ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
๋‹ค์ค‘ ์ธ์ˆ˜ ํ˜•์‹์˜ ์‹œ์Šคํ…œ๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋‚ด๋ถ€์—์„œ Perl ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค. makepp ๋ฌธ์˜ ๊ฒฝ์šฐ perl ํ•จ์ˆ˜ ๋˜๋Š” ์‚ฌ์šฉ์ž ๊ณ ์œ  ํ•จ์ˆ˜
์ด๊ฒƒ์ด makepp๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ทœ์น™์˜ ๊ฒฝ์šฐ
๊ทธ๊ฒƒ. ์Šคํฌ๋ฆฝํŠธ๋Š” ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ๊ตฌ๋ฌธ ๋ถ„์„๋˜์ง€๋งŒ ์‹ค์ œ ๋‚ด์šฉ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
pod2html์ฒ˜๋Ÿผ lib๋กœ ์ž‘์—…ํ•˜์„ธ์š”. ๊ทธ๋Ÿฌ๋ฉด ์ด lib๋Š” ์ตœ์ƒ์œ„ ์ˆ˜์ค€์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ
์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

perl { use mylib } # ์žฌ๋ถ„์„ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๋ชจ๋“  ๊ทœ์น™์œผ๋กœ ๋ถ„๊ธฐ๋ฉ๋‹ˆ๋‹ค.

%.์•„์›ƒ: %.in
makeperl { qw'myscript -o $(์ถœ๋ ฅ) $(์ž…๋ ฅ)' ์‹คํ–‰ }

์Šคํฌ๋ฆฝํŠธ๊ฐ€ "exit"๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ‘œ์ค€ ํŒŒ์ผ ์„ค๋ช…์ž๋ฅผ ๋‹ซ๊ฑฐ๋‚˜ ์‹œ์Šคํ…œ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.
๊ทธ ํ›„์— ์ •๋ฆฌํ•˜๋ ค๋ฉด(์—ด๋ฆฐ ํŒŒ์ผ, ๋ฉ”๋ชจ๋ฆฌ...) "์‹คํ–‰"์— ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ์—
๋ช…๋ น๋ฌธ์ด๋‚˜ Perl ํ•จ์ˆ˜ ๋‚ด์—์„œ "run"์„ ํ˜ธ์ถœํ•˜๋ฉด makepp์ด ๋ฐฉํ•ด๋ฅผ ๋ฐ›๊ฑฐ๋‚˜
์ •๋ฆฌ๋Š” makepp์ด ๋๋‚  ๋•Œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์•ž์„œ ์–ธ๊ธ‰ํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์™ธ๋ถ€์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.
๋Œ€์‹  ๋ช…๋ น์ค„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ๊ทœ์น™ ๋‚ด ์ •๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ทœ์น™์˜ ๋งˆ์ง€๋ง‰ ์ž‘์—…์œผ๋กœ ๊ทœ์น™ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๋Š” ์–ด์จŒ๋“  ๋‚˜์ค‘์— ์ข…๋ฃŒ๋˜๋ฏ€๋กœ
Windows๋ฅผ ์ œ์™ธํ•˜๊ณ .

์“ฐ๊ธฐ your ์ž์‹ ์˜ ์„œ๋ช… ๋ฐฉ๋ฒ•
๋•Œ๋กœ๋Š” makepp๊ฐ€ ๋‹ค๋ฅธ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ช… ๋ฐฉ๋ฒ•์„ ๊ณ„์‚ฐํ•˜๊ธฐ๋ฅผ ์›ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ์œ„ํ•œ
์˜ˆ๋ฅผ ๋“ค์–ด ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•˜๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹น์‹ ์ด
๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์ด์— ์˜์กดํ•˜๋Š” ์‹คํ–‰ ํŒŒ์ผ์„ ๋‹ค์‹œ ๋งํฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
์—ฐ๊ฒฐ์€ ๋Ÿฐํƒ€์ž„์— ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. (๊ทธ๋Ÿฌ๋‚˜ ์‹คํ–‰ ํŒŒ์ผ์„ ๋‹ค์‹œ ๋งํฌํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ์ด๊ฒƒ์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.) ์›ํ•˜๋Š” ๊ฒƒ makepp
ํ•ด์•ผ ํ•  ์ผ์€ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ๋™์ผํ•œ ์„œ๋ช…์„ ๊ฐ–๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ์ž์‹ ๋งŒ์˜ ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์„œ๋ช… ๋ฐฉ๋ฒ•("shared_object"๋ผ๊ณ  ๋ถ€๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค). ์ด ์„œ๋ช… ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค
๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ทœ์น™์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

myprogram : *.o lib1/lib1.so lib2/lib2.so
: ์„œ๋ช… shared_object
$(CC) $(์ž…๋ ฅ) -o $(์ถœ๋ ฅ)

์ด์ œ ์„œ๋ช… ๋ฐฉ๋ฒ•์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์„œ๋ช… ๋ฉ”์„œ๋“œ๋Š” ์ž์ฒด ํด๋ž˜์Šค์—ฌ์•ผ ํ•˜๋ฉฐ ํด๋ž˜์Šค์—๋Š” ๋ช‡ ๊ฐ€์ง€ ํŠน์ˆ˜ ๋ฉ”์„œ๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํ•ญ๋ชฉ(์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฐฐํฌํŒ์˜ Mpp/Signature.pm ์ฐธ์กฐ). ์ˆ˜์—… ์ด๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
"Mpp::Signature::" ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™์–ด ์žˆ์œผ๋ฏ€๋กœ ์ด ๊ฒฝ์šฐ ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
"Mpp::์„œ๋ช…::shared_object". ์šฐ๋ฆฌ๋Š” shared_object.pm ๋„ฃ์–ด
๊ทธ๊ฒƒ์€ Mpp::์„œ๋ช… Perl ํฌํ•จ ๊ฒฝ๋กœ ์–ด๋”˜๊ฐ€์— ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ; ๊ฐ€์žฅ ์‰ฌ์šด ๊ณณ
์—์žˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค Mpp/์„œ๋ช… makepp ์„ค์น˜ ๋””๋ ‰ํ† ๋ฆฌ(์˜ˆ:
/usr/local/share/makepp/Mpp/์„œ๋ช… ๋˜๋Š” ์–ด๋””์— ์„ค์น˜ํ–ˆ๋“ ).

์ด ์ˆ˜์—…์—์„œ ๋‹ค๋ฃจ์–ด์•ผ ํ•  ๋‚ด์šฉ์— ๋Œ€ํ•œ ์ •ํ™•ํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๋ณด๋ ค๋ฉด ๋‹ค์Œ์„ ์ฃผ์˜ ๊นŠ๊ฒŒ ์‚ดํŽด๋ณด์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํŒŒ์ผ Mpp/์„œ๋ช….pm ๊ทธ๋ฆฌ๊ณ  ์•„๋งˆ๋„ ๋˜ํ•œ Mpp/์„œ๋ช…/exact_match.pm makepp์—์„œ
๋ถ„ํฌ. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์€
๊ธฐ์กด ์„œ๋ช… ๋ฉ”์ปค๋‹ˆ์ฆ˜; ํŒŒ์ผ์ด ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ ๊ฒฝ์šฐ ์ƒ์ˆ˜๋ฅผ ๊ฐ–๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
์„œ๋ช…, ๋ฐ˜๋ฉด์— ํŒŒ์ผ์ด ๋‹ค๋ฅธ ๊ฒƒ์ด๋ผ๋ฉด ์šฐ๋ฆฌ๋Š” makepp์˜ ์ผ๋ฐ˜ ์„œ๋ช…์— ์˜์กดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
์„œ๋ช… ๋ฉ”์ปค๋‹ˆ์ฆ˜. ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ์—์„œ ์ƒ์†ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ์„ ํƒ๋˜๋Š” ์„œ๋ช… ๋ฐฉ๋ฒ•์ธ "Mpp::Signature::c_compilation_md5"
makepp์ด ๋งํฌ ๋ช…๋ น์„ ์ธ์‹ํ•  ๋•Œ.

๊ทธ๋ž˜์„œ ํŒŒ์ผ Mpp/์„œ๋ช…/shared_object.pm ๋‹ค์Œ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—„๊ฒฉํ•œ ์‚ฌ์šฉ;
ํŒจํ‚ค์ง€ Mpp::Signature::shared_object;
Mpp::Signature::c_compilation_md5๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
์šฐ๋ฆฌ์˜ @ISA = qw(Mpp::Signature::c_compilation_md5); # ์ƒ์†์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
์šฐ๋ฆฌ์˜ $shared_object = ์ถ•๋ณต \@ISA; # makepp์ด ์ฐพ๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋งˆ๋ฒ•์˜ ์กฐ๊ฐ
# ์ด ๋ฉ”์†Œ๋“œ์˜ ์„œ๋ธŒ๋ฃจํ‹ด. ๋ชจ๋‘
# ์„œ๋ช… ๋ฐฉ๋ฒ•์—๋Š” ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
# ๊ฐ’์€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  ์ž„์˜์˜ ๊ฐ์ฒด๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
# ์ด์ œ ์„œ๋ช…์ด ํ•„์š”ํ•  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
# ์ด ์„œ๋ช… ๋ฐฉ๋ฒ•์ด ํ™œ์„ฑํ™”๋œ ๋Œ€์ƒ ๋˜๋Š” ์ข…์†์„ฑ:
ํ•˜์œ„ ์„œ๋ช… {
my ($self, # $shared_object์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
$finfo) = @_; # ๋ชจ๋“  ๊ฒƒ์„ ํฌํ•จํ•˜๋Š” ํŠน๋ณ„ํ•œ ๊ตฌ์กฐ์ฒด
# makepp๋Š” ์ด ํŒŒ์ผ์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด๋‹ค
# ์ž์„ธํ•œ ๋‚ด์šฉ์€ Mpp/File.pm์„ ์ฐธ์กฐํ•˜์„ธ์š”.

if ($finfo->{NAME} =~ /\.s[oa]$/) { # ํŒŒ์ผ ์ด๋ฆ„์ด .so ๋˜๋Š” .sa๋กœ ๋๋‚˜๋‚˜์š”?
$finfo->file_exists๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๊นŒ? '์กด์žฌํ•ฉ๋‹ˆ๋‹ค': '';
# ํŒŒ์ผ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ํ•ญ์ƒ ๋™์ผํ•œ ์„œ๋ช…์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
# ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์„œ๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
# ๋ฌธ์ž์—ด "์กด์žฌํ•ฉ๋‹ˆ๋‹ค".
}

Mpp::์„œ๋ช…::c_compilation_md5::์„œ๋ช…;
# ํŒŒ์ผ์ด .so ๋˜๋Š” .sa๋กœ ๋๋‚˜์ง€ ์•Š์€ ๊ฒฝ์šฐ,
# makepp์˜ ์ผ๋ฐ˜์ ์ธ ์„œ๋ช… ๋ฐฉ๋ฒ•์— ์œ„์ž„ํ•ฉ๋‹ˆ๋‹ค.
}

์ด ํŒŒ์ผ์€ makepp ๋ฐฐํฌํŒ์˜ ์˜ˆ์ œ๋กœ ์ œ๊ณต๋˜๋ฉฐ ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋Œ“๊ธ€์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด๊ฒƒ์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด ๋†“์œผ๋ฉด ์–ด๋–จ๊นŒ์š”? ๊ธ€์Ž„์š”, ๋ฐ”๋€” ๋•Œ๊ฐ€ ์žˆ์–ด์š”.
๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ
๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ •์˜ํ•˜๋Š” ๊ธฐํ˜ธ ๋˜๋Š” ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•˜๋Š” ๊ธฐํ˜ธ
๋•Œ๋กœ๋Š” ์žฌ๋งํฌ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‹คํ–‰๋˜๋Š” ์ผ๋ถ€ ์„œ๋ธŒ๋ฃจํ‹ด์„ ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์ด์ œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
์„œ๋ธŒ๋ฃจํ‹ด "xyz()". ๋ง์ปค์— "-E" ๋˜๋Š” "--export-dynamic" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ
(GNU binutils์˜ ๊ฒฝ์šฐ, ๋‹ค๋ฅธ ๋ง์ปค์—๋Š” ๋‹ค๋ฅธ ์˜ต์…˜ ์ด๋ฆ„์ด ์žˆ์Œ) "xyz()" ๊ธฐํ˜ธ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ”„๋กœ๊ทธ๋žจ์— ์กด์žฌํ•˜๋”๋ผ๋„ ๋Ÿฐํƒ€์ž„ ๋ง์ปค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋” ๋‚˜์œ ๊ฒƒ์€ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ "xyz()"๋ฅผ ์ •์˜ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. libxyz), ์ด์™€ ๊ฐ™์ด:

my_program: main.o lib1/lib1.so xyz/libxyz.a

"libxyz"๋Š” .a ํŒŒ์ผ์ด ์•„๋‹Œ .๊ทธ๋ž˜์„œ ํŒŒ์ผ์„ ์—ด๋ฉด "xyz()"๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์ •ํ™•ํ•˜๊ฒŒ๋ถ€ํ„ฐ libxyz.a ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๋Š” ํ•œ.

Mpp::Signature ๋ฉ”์†Œ๋“œ๋Š” ๋˜ํ•œ ๋‹ค์Œ์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ์ž์—ด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ
ํŒŒ์ผ์€ ๋ณ€๊ฒฝ๋˜์—ˆ์ง€๋งŒ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด,
makepp ๋ฐฐํฌํŒ์˜ ์„œ๋ช… ๋ฐฉ๋ฒ• "target_newer"๋Š” ๋‹จ์ง€
๋Œ€์ƒ์€ ์ข…์†์„ฑ๋ณด๋‹ค ์ตœ์‹ ์ธ ๋ฐ˜๋ฉด ์„œ๋ช… ๋ฐฉ๋ฒ• "exact_match"(๋ฐ
"md5" ๋ฐ "c_compilation_md5"์™€ ๊ฐ™์ด ์ด์— ์˜์กดํ•˜๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ์—๋Š” ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
ํŒŒ์ผ์—๋Š” ๋งˆ์ง€๋ง‰ ๋นŒ๋“œ์™€ ๋™์ผํ•œ ์„œ๋ช…์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๊ท€ํ•˜๊ฐ€ ๊นจ๋‹ซ๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ์„œ๋ช… ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
๊ฐ€๋Šฅ์„ฑ. ์ผ๋ฐ˜์ ์ธ ๋ชฉ์ ์ด ์ถฉ๋ถ„ํ•˜๋‹ค๋ฉด ์ด๋“ค ์ค‘ ์ผ๋ถ€๋Š” ๊ฒฐ๊ตญ
makepp์— ํ†ตํ•ฉ๋จ:

ยท ๋‚ด๋ณด๋‚ธ ๋ชจ๋“  ํ•ญ๋ชฉ์˜ ์ฒดํฌ์„ฌ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ์„œ๋ช… ๋ฐฉ๋ฒ•
๊ธฐํ˜ธ ๋ฐ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ธฐํ˜ธ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์Œ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
์œ„ ์˜ˆ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๋ชจ๋“  ์ƒํ™ฉ์—์„œ ์˜ฌ๋ฐ”๋ฅธ ๋งํฌ๋ฅผ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
makepp ๋ฐฐํฌํŒ์—์„œ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์‹คํ—˜์ ์ธ ์‹œ๋„๊ฐ€ ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค(์ฐธ์กฐ:
Mpp/์„œ๋ช…/shared_object.pm), ๊ทธ๋Ÿฌ๋‚˜ GNU binutils ๋ฐ ELF์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
ํ˜„์žฌ ๋„์„œ๊ด€.

ยท ํŒŒ์ผ์— ๊ธฐ๋ก๋œ ๋‚ ์งœ ์Šคํƒฌํ”„๋ฅผ ๋ฌด์‹œํ•˜๋Š” ์„œ๋ช… ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋งŒ์•ฝ ๋‹น์‹ ์ด
์ƒ์„ฑ .c ๋ฌธ์ž์—ด์„ ๋„ฃ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•˜๋Š” ์ผ๋ถ€ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™์œผ๋กœ ํŒŒ์ผ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
๋‹ค์Œ๊ณผ ๊ฐ™์ด :

static char * date_stamp = "01๋…„ 2004์›” XNUMX์ผ์— ์•„๋ฌด๋„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.";

๋‚ ์งœ ์Šคํƒฌํ”„์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํŠน๋ณ„ํžˆ ๋ฌด์‹œํ•˜๋Š” ์„œ๋ช… ๋ฐฉ๋ฒ•์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ๋‚ ์งœ ์Šคํƒฌํ”„๋งŒ ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ makepp๋Š” ๋‹ค์‹œ ๋นŒ๋“œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ยท ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ์„œ๋ช…์„ ๊ณ„์‚ฐํ•˜์ง€๋งŒ ์„œ๋ช…์„ ๋ฌด์‹œํ•˜๋Š” ์„œ๋ช… ๋ฐฉ๋ฒ•
์žฌ๊ตฌ์ถ• ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•  ๋•Œ ์•„ํ‚คํ…์ฒ˜ ์˜์กด์„ฑ. ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ง„์ •ํ•œ ์•„ํ‚คํ…์ฒ˜ ๋…๋ฆฝ์  ํŒŒ์ผ; ํ˜„์žฌ ํ•˜๋‚˜์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒฝ์šฐ
makepp๋Š” ์ „ํ™˜ํ•  ๋•Œ ์•„ํ‚คํ…์ฒ˜ ๋…๋ฆฝ์ ์ธ ํŒŒ์ผ๋„ ๋‹ค์‹œ ๋นŒ๋“œํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ์•„ํ‚คํ…์ฒ˜๋กœ.

ยท ๋ผํ…์Šค ํŒŒ์ผ์˜ ์ฃผ์„์„ ๋ฌด์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•„๋Š” ์„œ๋ช… ๋ฐฉ๋ฒ•
"c_compilation_md5" ๋ฉ”์†Œ๋“œ๋Š” C ํŒŒ์ผ์˜ ์ฃผ์„์„ ๋ฌด์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ยท ๋ฌธ์„œ์—๋งŒ ์ฒดํฌ์„ฌ์„ ์ ์šฉํ•˜๋Š” ์ž๋™ ๋ฌธ์„œ ์ถ”์ถœ์„ ์œ„ํ•œ ์„œ๋ช… ๋ฐฉ๋ฒ•
๋ฌธ์„œ ์ถ”์ถœ๊ธฐ์— ํ•„์š”ํ•œ ์ฃผ์„์„ ๋‹ฌ๊ณ  ์†Œ์Šค์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.
ํŒŒ์ผ.

๋ฏธ์™„์„ฑ
์ด ๋ฌธ์„œ๋Š” ์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ž์‹ ๋งŒ์˜ ์Šค์บ๋„ˆ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃจ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํŒŒ์ผ ๋“ฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

onworks.net ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜จ๋ผ์ธ์œผ๋กœ makepp_extending ์‚ฌ์šฉ


๋ฌด๋ฃŒ ์„œ๋ฒ„ ๋ฐ ์›Œํฌ์Šคํ…Œ์ด์…˜

Windows ๋ฐ Linux ์•ฑ ๋‹ค์šด๋กœ๋“œ

Linux ๋ช…๋ น

Ad