์ด๊ฒ์ 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 ์ฌ์ฉ