ืื ื’ืœื™ืชืฆืจืคืชื™ืชืกืคืจื“ื™

Ad


ืกืžืœ OnWorks

makepp_extending - ืžืงื•ื•ืŸ ื‘ืขื ืŸ

ื”ืคืขืœ makepp_extending ื‘ืกืคืง ื”ืื™ืจื•ื— ื”ื—ื™ื ืžื™ ืฉืœ OnWorks ืขืœ ืื•ื‘ื•ื ื˜ื• Online, Fedora Online, ืืžื•ืœื˜ื•ืจ ืžืงื•ื•ืŸ ืฉืœ Windows ืื• ืืžื•ืœื˜ื•ืจ ืžืงื•ื•ืŸ ืฉืœ MAC OS

ื–ื•ื”ื™ ื”ืคืงื•ื“ื” makepp_extending ืฉื ื™ืชืŸ ืœื”ืจื™ืฅ ื‘ืกืคืง ื”ืื™ืจื•ื— ื”ื—ื™ื ืžื™ ืฉืœ OnWorks ื‘ืืžืฆืขื•ืช ืื—ืช ืžืชื—ื ื•ืช ื”ืขื‘ื•ื“ื” ื”ืžืงื•ื•ื ื•ืช ื”ืžืจื•ื‘ื•ืช ืฉืœื ื•, ื›ื’ื•ืŸ Ubuntu Online, Fedora Online, ืืžื•ืœื˜ื•ืจ ืžืงื•ื•ืŸ ืฉืœ Windows ืื• ืืžื•ืœื˜ื•ืจ ืžืงื•ื•ืŸ ืฉืœ MAC OS

ืชึธื›ึฐื ึดื™ืช:

ืฉืึตื


makepp_extending -- ื›ื™ืฆื“ ืœื”ืจื—ื™ื‘ ืืช makepp ื‘ืืžืฆืขื•ืช Perl

ืชื™ืื•ืจ


Makepp ื‘ืื•ืคืŸ ืคื ื™ืžื™ ืžืกืคื™ืง ื’ืžื™ืฉ ื›ืš ืฉืขืœ ื™ื“ื™ ื›ืชื™ื‘ืช ืžืขื˜ ืงื•ื“ Perl, ืืชื” ื™ื›ื•ืœ
ื”ื•ืกืฃ ืคื•ื ืงืฆื™ื•ืช ืื• ื‘ืฆืข ืžืกืคืจ ืคืขื•ืœื•ืช ืื—ืจื•ืช.

ื›ืœืœื™ ื”ืขืจื•ืช on ื›ืชื™ื‘ื” ืคืจืœ ืงื•ื“ ืœ ืœืขื‘ื•ื“ ืขื makepp
ื›ืœ makefile ื—ื™ ื‘ื—ื‘ื™ืœื” ืžืฉืœื•. ืœืคื™ื›ืš ื”ื’ื“ืจื•ืช ื‘ืงื•ื‘ืฅ makefile ืื—ื“ ืœื ืžืฉืคื™ืขื•ืช
ื”ื’ื“ืจื•ืช ื‘ืงื•ื‘ืฅ makefile ืื—ืจ. ืงื‘ื•ืฆื” ืžืฉื•ืชืคืช ืฉืœ ืคื•ื ืงืฆื™ื•ืช ื›ื•ืœืœ ื›ืœ ื”ืกื˜ื ื“ืจื˜ื™ื
ืคื•ื ืงืฆื™ื•ืช ืžื ื™ืคื•ืœืฆื™ื” ื˜ืงืกื˜ื•ืืœื™ืช ืžื™ื•ื‘ืื•ืช ืœื—ื‘ื™ืœื” ื›ืืฉืจ ื”ื™ื ื ื•ืฆืจืช.

ืžืฉืชื ื™ Makefile ืžืื•ื—ืกื ื™ื ื›ืกืงืœืจื™ื ืฉืœ Perl ื‘ื—ื‘ื™ืœื” ื–ื•. (ื™ืฉ ื™ื•ืฆืื™ื ืžื”ื›ืœืœ
ื–ื”: ืžืฉืชื ื™ื ืื•ื˜ื•ืžื˜ื™ื™ื ื•ืขืจืš ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ืžืฉืชื ื™ื ื›ืžื• CC ื”ื ืœืžืขืฉื”
ืžื™ื•ืฉื ื›ืคื•ื ืงืฆื™ื•ืช ืœืœื ืืจื’ื•ืžื ื˜ื™ื. ื›ื•ื•ืŸ ืœื•ื•ืจืก ืกืคืฆื™ืคื™ื•ืช, ื•ื•ืจืก ื‘ืฉื•ืจืช ื”ืคืงื•ื“ื” ื•
ืกื‘ื™ื‘ืช vars ืœื ื ืจืื™ื ื›ืš.) ืœื›ืŸ ืœื›ืœ ืงื•ื“ Perl ืฉืืชื” ื›ื•ืชื‘ ื™ืฉ ื’ื™ืฉื” ืœื›ืœ
ืžืฉืชื ื™ makefile. ืžืฉืชื ื™ื ื’ืœื•ื‘ืœื™ื™ื ืžืื•ื—ืกื ื™ื ื‘ื—ื‘ื™ืœืช "Mpp::global". ืœึดืจึฐืื•ึนืช
ืžืฉืชื ื™ Makefile ืœืคืจื˜ื™ื.

ื›ืœ ืื—ืช ืžื”ื”ืฆื”ืจื•ืช (ifperl / ifmakeperl, perl / makeperl, sub / makesub),
ืคื•ื ืงืฆื™ื•ืช (perl / makeperl, map / makemap) ื•ืคืขื•ืœืช ื”ื›ืœืœ (perl / makeperl) ืขื‘ื•ืจ
ื›ืชื™ื‘ืช ืงื•ื“ Perl ื™ืฉื™ืจื•ืช ื‘-makefile ืžื’ื™ืข ื‘ืฉื ื™ ื˜ืขืžื™ื. ื”ืจืืฉื•ืŸ ื”ื•ื ืœื—ืœื•ื˜ื™ืŸ
Perl ืจื’ื™ืœ, ื›ืœื•ืžืจ ืขืœื™ืš ืœื”ืฉืชืžืฉ ื‘ืงื™ื“ื•ืžืช "f_" ื›ืคื™ ืฉื”ื•ืกื‘ืจ ื‘ืกืขื™ืฃ ื”ื‘ื, if
ืืชื” ืจื•ืฆื” ืœืงืจื•ื ืœืคื•ื ืงืฆื™ื•ืช makepp. ื”ื’ืจืกื” ื”ืฉื ื™ื™ื” ืชื—ื™ืœื” ืžืขื‘ื™ืจ ืืช ื”ื”ืฆื”ืจื”
ื”ืจื—ื‘ืช ืžืฉืชื ื” ื‘ืกื’ื ื•ืŸ ื”ืคื•ืš, ื›ืœื•ืžืจ ืืชื” ืฆืจื™ืš ืœื”ื›ืคื™ืœ ืืช ื”-"$" ืฉืืชื” ืจื•ืฆื” ืฉ-Perl ื™ืจืื”.

ื˜ื™ืคื•ืœ ื”ืงืฆื” ื”ื•ื ืžื™ื•ื—ื“ ืžื›ื™ื•ื•ืŸ ืฉื”ื ืชื•ื ื™ื ื”ืขืฆื•ืžื™ื ืฉืœ makepp (ื‘ื”ืชืื ืœืžืขืจื›ืช ื”ื‘ื ื™ื™ื” ืฉืœืš).
ืœืžื‘ื ื™ื ื™ื™ื“ืจืฉื• ืžืกืคืจ ืฉื ื™ื•ืช ืœืื™ืกื•ืฃ ืืฉืคื” ืขื ื™ืฆื™ืื” ืจื’ื™ืœื”. ืื– ืื ื—ื ื• ืขื•ืฉื™ื ื
ื™ืฆื™ืื” ืžื›ื•ื— ื’ืก. ื‘ืชื”ืœื™ืš ื”ืจืืฉื™ ืืชื” ืขื“ื™ื™ืŸ ื™ื›ื•ืœ ืœืงื‘ืœ "END" ื‘ืœื•ืงื™ื ืื‘ืœ ืื ื™ืฉ ืœืš ื›ืืœื”
ืžื˜ืคืœื™ื ื‘ืงื‘ืฆื™ื ื’ืœื•ื‘ืœื™ื™ื ืฉื”ื ืขืœื•ืœื™ื ืœื ืœื”ื™ืฉื˜ืฃ. ืื‘ืœ ืืชื” ืฆืจื™ืš ืœื”ืฉืชืžืฉ ื‘ืžื™ืœื•ื ื™ ื”ืžื•ื“ืจื ื™
ื™ื“ื™ื•ืช ืงื‘ืฆื™ื, ืฉื ืกื’ืจื•ืช ื›ืจืื•ื™ ื›ืืฉืจ ื™ื•ืฆืื™ื ืžื”ืชื—ื•ื.

ื‘ืงื•ื“ Perl ื”ืจืฅ ื™ืฉื™ืจื•ืช ื›ืคืขื•ืœืช ื›ืœืœ ืื• ื‘ืืžืฆืขื•ืช ืคืงื•ื“ื” ืฉืืชื” ืžื’ื“ื™ืจ, ื–ื”
ืžื•ืœ. ื‘ืœื•ืงื™ื ืฉืœ "END" ืœื ื™ื•ืคืขืœื•, ืื‘ืœ ืคืขื•ืœื•ืช ืงื‘ืฆื™ื ื’ืœื•ื‘ืœื™ื•ืช ื ืžื—ืงื•ืช ืขื‘ื•ืจืš. ื”
"ื”ืจืก" ืฉืœ ืื•ื‘ื™ื™ืงื˜ื™ื ื’ืœื•ื‘ืœื™ื™ื ืœืขื•ืœื ืœื ื™ื•ืคืขืœ.

ืžื•ืกื™ืฃ ื—ื“ืฉ ื˜ืงืกื˜ื•ืืœื™ืช ืคื•ื ืงืฆื™ื•ืช
ืืชื” ื™ื›ื•ืœ ืœื”ื•ืกื™ืฃ ืคื•ื ืงืฆื™ื” ื—ื“ืฉื” ืœืจืคืจื˜ื•ืืจ ืฉืœ makepp ืคืฉื•ื˜ ืขืœ ื™ื“ื™ ื”ื’ื“ืจืช ืชืช ืฉื’ืจืช Perl ืฉืœ
ืื•ืชื• ืฉื ืื‘ืœ ืขื ืงื™ื“ื•ืžืช "f_". ืœื“ื•ื’ืžื”:

sub f_myfunc {
$argument ืฉืœื™ = &arg; # ืชืŸ ืฉื ืœืืจื’ื•ืžื ื˜.
my( undef, $mkfile, $mkfile_line ) = @_; # ืชืŸ ืฉื ืœืืจื’ื•ืžื ื˜ื™ื.

... ืœืขืฉื•ืช ืžืฉื”ื• ื›ืืŸ

ื”ื—ื–ืจ $return_value;
}

XYZ := $(myfunc my func arguments)

ืื ื”ืคื•ื ืงืฆื™ื” ืฉืœืš ืœื ืœื•ืงื—ืช ืืจื’ื•ืžื ื˜ื™ื, ืื™ืŸ ืžื” ืœืขืฉื•ืช. ืื ื”ืคื•ื ืงืฆื™ื” ืฉืœืš ืœื•ืงื—ืช ืื—ื“
ืืจื’ื•ืžื ื˜, ื›ืžื• ื‘ื“ื•ื’ืžื” ืœืžืขืœื”, ื”ืฉืชืžืฉ ื‘-accessor ื”ืคืฉื•ื˜ &arg ื›ื“ื™ ืœื”ืฉื™ื’ ืื•ืชื•. ืื ืืชื”
ืžืฆืคื” ืœื™ื•ืชืจ ื˜ื™ืขื•ื ื™ื, ืืชื” ืฆืจื™ืš ืืช "args" ื”ืžื•ืจื›ื‘ ื™ื•ืชืจ ืฉืœ ื”ืขื–ืจ ื”ืžืชื•ืืจ ืœื”ืœืŸ.

ืื‘ื™ื–ืจื™ื ืืœื” ืžืขื‘ื“ื™ื ืืช ืื•ืชื ืฉืœื•ืฉื” ืคืจืžื˜ืจื™ื ืฉื™ืฉ ืœื”ืขื‘ื™ืจ ืœื›ืœ "f_"
ืคื•ื ืงืฆื™ื”, ื›ืœื•ืžืจ ื”ืืจื’ื•ืžื ื˜ื™ื ืฉืœ ื”ืคื•ื ืงืฆื™ื”, ื”ืื•ื‘ื™ื™ืงื˜ makefile ื•ืžืชืืจ ืฉื•ืจื” ืขื‘ื•ืจ
ื”ื•ื“ืขื•ืช. ืœื›ืŸ ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื˜ื•ืคืก &arg ื”ื™ืขื™ืœ ื‘ืžืงืจื” ื”ืจืืฉื•ืŸ.

ืžื ื’ื ื•ืŸ &arg ืžื˜ืคืœ ื‘ืคืขื•ืœื•ืช ื”ื‘ืื•ืช ืขื‘ื•ืจืš: ืื ื”ื˜ื™ืขื•ื ื™ื ื›ื‘ืจ ื”ื™ื•
ืžื•ืจื—ื‘ (ืœืžืฉืœ ื›ื“ื™ ืœืžืฆื•ื ืืช ืฉื ื”ืคื•ื ืงืฆื™ื” ื‘-"$(my$(function) arg)" ื”-arg ื”ื•ื
ืขื‘ืจ ื›ืžื—ืจื•ื–ืช ื•ืจืง ื—ื–ืจ. ืื ื”ื˜ื™ืขื•ืŸ ืขื“ื™ื™ืŸ ื–ืงื•ืง ืœื”ืจื—ื‘ื”, ื–ื” ื”
ื‘ืžืงืจื” ืจื’ื™ืœ, ื–ื” ื‘ืžืงื•ื ื–ืืช ื”ืคื ื™ื” ืœืžื—ืจื•ื–ืช. ื”ืขื–ืจ &arg ืžืจื—ื™ื‘ ืื•ืชื• ืขื‘ื•ืจืš,
ืขื‘ื•ืจื• ื”ื•ื ืฆืจื™ืš ืืช ื”ืื•ื‘ื™ื™ืงื˜ makefile ื‘ืชื•ืจ ื”ืคืจืžื˜ืจ ื”ืฉื ื™ ืฉืœื•.

ืื ืืชื” ืžืฆืคื” ืœื™ื•ืชืจ ืืจื’ื•ืžื ื˜ื™ื, ืื•ืœื™ ื‘ืžืกืคืจ ืžืฉืชื ื”, ื”ืขื‘ื•ื“ื” ืžืชื‘ืฆืขืช ืขืœ ื™ื“ื™ "args".
ื”ืขื–ืจ ื”ื–ื” ืœื•ืงื— ืืช ืื•ืชื 3 ืคืจืžื˜ืจื™ื ื›ืžื• arg, ื‘ืชื•ืกืคืช ืคืจืžื˜ืจื™ื ื ื•ืกืคื™ื:

ืžืงืกื™ืžื•ื: ืžืกืคืจ args (ื‘ืจื™ืจืช ืžื—ื“ืœ 2): ืชืŸ ~0 (maxint) ืขื‘ื•ืจ ืื™ื ืกื•ืคื™
min: ืžืกืคืจ args (ื‘ืจื™ืจืช ืžื—ื“ืœ 0 ืื ื”ืžืงืกื™ืžื•ื ื”ื•ื ~0, ืื—ืจืช ื–ื”ื” ืœืžืงืกื™ืžื•ื)
only_comma: ืืœ ืชืื›ืœ ืจื•ื•ื— ืกื‘ื™ื‘ ืคืกื™ืงื™ื, ืจื’ื™ืœ ืขื‘ื•ืจ ืฉืื™ื ื• ืฉื ืงื•ื‘ืฅ

ืœื›ืœ ื”ื™ื•ืชืจ ืžืงืกื™ืžื•ื, ืื‘ืœ ืœืคื—ื•ืช ืคืกื™ืงื™ื ืžื™ื ื™ืžืœื™ื™ื ื”ืงื™ื™ืžื™ื ืœืคื ื™ ื”ืจื—ื‘ื” ืžืฉืžืฉื™ื ืœืคื™ืฆื•ืœ
ื˜ื™ืขื•ื ื™ื. ื›ืžื” ื“ื•ื’ืžืื•ืช ืžื”ืคื•ื ืงืฆื™ื•ืช ื”ืžื•ื‘ื ื•ืช ืฉืœ makepp:

my( $prefix, $text ) = args $_[0], $_[1], $_[2], 2, 2, 1; # addprefix
ืขื‘ื•ืจ $cond ืฉืœื™ ( args $_[0], undef, $_[2], ~0 ) ... # ื•, ืื•
my @args= args $_[0], $_[1], $_[2], ~0, 1, 1; ืฉื™ื—ื” ืื—ืช
my( $filters, $words) = args $_[0], $_[1], $_[2]; ืžืกื ืŸ #

ื”ืคื•ื ืงืฆื™ื” ืฆืจื™ื›ื” ืœื”ื—ื–ื™ืจ ืžื—ืจื•ื–ืช ืกืงืœืจื™ืช (ืœื ืžืขืจืš) ืืฉืจ ืžื•ื›ื ืกืช ืœืื—ืจ ืžื›ืŸ ืœืชื•ืš
ื˜ืงืกื˜ ื‘ืื•ืชื• ืฉืœื‘.

ืื ื”ืคื•ื ืงืฆื™ื” ืฉืœืš ื ืชืงืœืช ื‘ืฉื’ื™ืื”, ื”ื™ื ืืžื•ืจื” ืœืžื•ืช ื‘ืืžืฆืขื•ืช ื”ืžืฉืคื˜ ื”ืจื’ื™ืœ ืฉืœ Perl die.
ื–ื” ื™ืœื›ื“ ืขืœ ื™ื“ื™ makepp ื•ื”ื•ื“ืขืช ืฉื’ื™ืื” ื”ืžืฆื™ื’ื” ืืช ืฉื ื”ืงื•ื‘ืฅ ื•ื”ืฉื•ืจื”
ืžืกืคืจ ื”ื‘ื™ื˜ื•ื™ ืฉื’ื•ืจื ืœืฉื’ื™ืื” ื™ื•ื“ืคืก.

ืœืžืขืฉื” ืื™ืŸ ืžื’ื‘ืœื•ืช ืขืœ ืžื” ืฉื”ืคื•ื ืงืฆื™ื” ื™ื›ื•ืœื” ืœืขืฉื•ืช; ืืชื” ื™ื›ื•ืœ ืœื’ืฉืช ืœืงื•ื‘ืฅ, ื”ืจืฅ
ืคืงื•ื“ื•ืช ืžืขื˜ืคืช ื•ื›ื•'.

ื›ื™ื•ื ืžื•ืจื—ื‘ื™ื ื‘ื™ื˜ื•ื™ื™ื ื”ืžื•ืคื™ืขื™ื ื‘ืชืœื•ืช ื•ื‘ืคืขื•ืœื•ืช ื”ื›ืœืœ
ืคืขื ืื—ืช ื‘ืขื•ื“ ื‘ื™ื˜ื•ื™ื™ื ื”ืžื•ืคื™ืขื™ื ื‘ืžื˜ืจื•ืช ืžื•ืจื—ื‘ื™ื ืคืขืžื™ื™ื, ืื– ื”ื™ื–ื”ืจ ืื ืืชื”
ืœืคื•ื ืงืฆื™ื” ื™ืฉ ืชื•ืคืขื•ืช ืœื•ื•ืื™ ื•ื”ื™ื ืงื™ื™ืžืช ื‘ื‘ื™ื˜ื•ื™ ืœืžื˜ืจื”.

ืฉื™ืžื• ืœื‘ ืฉื”ืกื‘ื™ื‘ื” (ื‘ืžื™ื•ื—ื“ ื”-cwd) ืฉื‘ื” ื”ืคื•ื ืงืฆื™ื” ืžืขืจื™ื›ื” ืชื”ื™ื”
ืœื ื‘ื”ื›ืจื— ืชื•ืื ืืช ื”ืกื‘ื™ื‘ื” ืฉื‘ื” ื”ื›ืœืœื™ื ืžื”-Makefile ืฉื‘ื•
ื”ืคื•ื ืงืฆื™ื” ื”ื•ืขืจื›ื” ืžื‘ื•ืฆืขื•ืช. ืื ื–ื• ื‘ืขื™ื” ืขื‘ื•ืจืš, ืื– ื”ืคื•ื ืงืฆื™ื” ืฉืœืš
ื›ื ืจืื” ืฆืจื™ืš ืœื”ื™ืจืื•ืช ื‘ืขืจืš ื›ืš:

sub f_foo {
...
chdir $makefile->{CWD};

... ื•ื›ื• '
}

ืžื›ื ื™ืก ืคื•ื ืงืฆื™ื•ืช ืืœ ืชื•ืš a ืคืจืœ ืžื•ื“ื•ืœ
ืื ืชื›ื ื™ืก ืคื•ื ืงืฆื™ื•ืช ืœืงื•ื‘ืฅ include, ื™ื”ื™ื” ืœืš ืขื•ืชืง ืื—ื“ ืœื›ืœ Makeppfile ืืฉืจ
ืžืฉืชืžืฉ ื‘ื•. ื›ื“ื™ ืœื”ื™ืžื ืข ืžื›ืš, ืืชื” ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืื•ืชื ื›ืžื•ื“ื•ืœ Perl ืจื’ื™ืœ ืขื "ื™ืฆื•ืืŸ"
ืžืžืฉืง, ื•ืœื”ืฉืชืžืฉ ื‘ื–ื”. ื–ื” ื™ื™ื˜ืขืŸ ืžื”ืจ ื™ื•ืชืจ ื•ื™ื—ืกื•ืš ื–ื™ื›ืจื•ืŸ:

perl { ื”ืฉืชืžืฉ ื‘- mymodule }
perl {
ื”ืฉืชืžืฉ ื‘::module ืฉืœื™; # ืœืฉื™ื : ื‘ืฉื•ืจื” ื—ื“ืฉื” ืื– ื–ื” ืœื ืžื ื•ืชื— ื›ื›ืœืœ
}

ืื ืืชื” ื–ืงื•ืง ืœืื—ืช ืžื”ืคื•ื ืงืฆื™ื•ืช ื”ื–ืžื™ื ื•ืช ื‘ื“ืจืš ื›ืœืœ ื‘-Makefile (ื›ืžื• ื”-"f_"
ืคื•ื ืงืฆื™ื•ืช, "arg" ืื• "args"), ืขืœื™ืš ืœื”ื›ื ื™ืก ืืช ื”ืฉื•ืจื” ื”ื–ื• ืœืžื•ื“ื•ืœ ืฉืœืš:

ื”ืฉืชืžืฉ ื‘-Mpp::Subs;

ื”ื—ื™ืกืจื•ืŸ ื”ื•ื ืฉื”ืžื•ื“ื•ืœ ื™ื”ื™ื” ื‘ื—ื‘ื™ืœื” ืฉื•ื ื” ืžืคื•ื ืงืฆื™ื” ื™ืฉื™ืจื•ืช
ืžื•ืคื™ืข ื‘ืงื•ื‘ืฅ makefile. ืื– ืืชื” ืฆืจื™ืš ืœื”ืขื‘ื™ืจ ื”ื›ืœ ื›ืคืจืžื˜ืจื™ื, ืื• ืœื‘ื ื•ืช
ืฉืžื•ืช ืขื ืคื•ื ืงืฆื™ื™ืช ื”"ืžืชืงืฉืจ" ืฉืœ ืคืจืœ.

ื™ึดืขื•ึผื“ ื—ื™ืฆื•ื ื™ ืคืจืœ ืกืงืจื™ืคื˜ื™ื
ืื ืืชื” ืงื•ืจื ืœืกืงืจื™ืคื˜ ื—ื™ืฆื•ื ื™ ืฉืœ Perl ื“ืจืš "ืžืขืจื›ืช", ืื• ื›ื›ืœืœ ืคืขื•ืœื”, makepp ื™ื—ืœืง ื
ืชื”ืœื™ืš ื—ื“ืฉ (ืืœื ืื ื›ืŸ ื–ื• ืคืขื•ืœืช ื”ื›ืœืœ ื”ืื—ืจื•ื ื”) ื•ืœืคื˜ืจ ืžืชื•ืจื’ืžืŸ ื—ื“ืฉ ืœื’ืžืจื™ ืฉืœ perl.
ืื™ืŸ ื‘ื–ื” ืฉื•ื ื“ื‘ืจ ืจืข, ื—ื•ืฅ ืžื–ื” ืฉื™ืฉ ื“ืจืš ื™ืขื™ืœื” ื™ื•ืชืจ:

&ื”ืคืงื•ื“ื” ื•ื™ื›ื•ื—ื™ื ...
ื–ื• ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืคืขื•ืœืช ื›ืœืœ. ื–ื” ื™ืงืจื ืœืคื•ื ืงืฆื™ื” ื”ืคืงื•ื“ื” ืขื ืงื™ื“ื•ืžืช "c_", ื•
ื”ืขื‘ื™ืจื• ืืช ื”ืฉืืจ (ืื•ืคืฆื™ื•ื ืœื™ ืžืฆื•ื˜ื˜ ื‘ืกื’ื ื•ืŸ makepp -- ืœื ื‘ื“ื™ื•ืง ืื•ืชื• ื”ื“ื‘ืจ ื›ืžื•
ืžืขื˜ืคืช) ื˜ื™ืขื•ื ื™ื. ืื ืœื ื ื™ืชืŸ ืœืžืฆื•ื ืคื•ื ืงืฆื™ื” ื›ื–ื•, ื–ื” ืžืขื‘ื™ืจ ืืช ื›ืœ ื”ืžื—ืจื•ื–ื•ืช ืืœ
"ืœึธืจื•ึผืฅ".

sub c_mycmd { my @args = @_; ... }

$(phony callcmd):
&mycmd 'arg with space' arg2 "arg3" # ืงื•ืจื ืœ-c_mycmd

%.out: %.in
&myscript -o $(output) $(input) # ืงื•ืจื ืœ-myscript ื—ื™ืฆื•ื ื™

ืืชื” ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืืช ื”ืคืงื•ื“ื•ืช ืฉืœืš ื‘ืžืกื’ืจืช ื”ืจื›ื™ื‘ื™ื ื”ืžื•ื‘ื ื™ื, ื”ืžืืคืฉืจื™ื ืœืš ืœื”ืฉืชืžืฉ
ืื•ืชืŸ ืืคืฉืจื•ื™ื•ืช ืกื˜ื ื“ืจื˜ื™ื•ืช ื›ืžื• ืฉื™ืฉ ืœื”ื, ื•ื˜ื™ืคื•ืœ ื”ืงืœื˜/ืคืœื˜ ืฉื”ื ื ื•ืชื ื™ื.

ืื•ืคืจื˜ื•ืจ ื”ื‘ืœื•ืง "Mpp::Cmds::frame" ืžืœื•ื•ื” ื‘ืจืฉื™ืžืช ืืคืฉืจื•ื™ื•ืช ืฉืœ ืื•ืชื™ื•ืช ื‘ื•ื“ื“ื•ืช
ื”ืจื›ื™ื‘ื™ื ื”ืžื•ื‘ื ื™ื (ืžืงืกื™ืžื•ื "qw(fi I โ€‹โ€‹o O rs)"). ื’ื ืื ืชืฆื™ื™ืŸ ืืคืฉืจื•ืช ืžืฉืœืš
ืื ืชืขืงื•ืฃ ืื—ื“ ืžืืœื”, ืืชื” ืขื“ื™ื™ืŸ ื ื•ืชืŸ ืืช ื”ืื•ืช ื”ื‘ื•ื“ื“ืช ืฉืœ ื”ืืคืฉืจื•ืช ื”ืกื˜ื ื“ืจื˜ื™ืช.

ื›ืœ ืืคืฉืจื•ืช ืžืฉืœื• ืžืฆื•ื™ื ืช ื‘ืชื•ืจ "[qw(n name), \$ref, ืืจื’, ืชึทืช]". ื”ืฉื ื™ื™ื ื”ืจืืฉื•ื ื™ื
ื”ืืœืžื ื˜ื™ื ื”ื ืฉื ืงืฆืจ ื•ืืจื•ืš, ื•ืื—ืจื™ื• ื”ืคื ื™ื” ืœืžืฉืชื ื” ื•ืœืคื™ ืื•ืคืฆื™ื” ืขืœ ื™ื“ื™
ื‘ื•ืœื™ืื ื™ ืื ืœืงื—ืช ื•ื™ื›ื•ื—. ืœืœื arg, ื”ืžืฉืชื ื” ื”ื•ื
ื’ื“ืœ ื‘ื›ืœ ืคืขื ืฉื”ืืคืฉืจื•ืช ื ื™ืชื ืช, ืื—ืจืช ืขืจืš ื”ืื•ืคืฆื™ื” ืžืื•ื—ืกืŸ ื‘ื”.

sub c_my_ocmd { # ืžืงืจื” ืคืœื˜ ื˜ื™ืคื•ืกื™
ืžืงื•ืžื™ @ARGV = @_;
Mpp::Cmds::frame {

... ืœื”ื“ืคื™ืก ืžืฉื”ื• ื›ืืŸ ืขื @ARGV, ืขื ืืคืฉืจื•ื™ื•ืช ืฉื›ื‘ืจ ื”ื•ืกืจื• ืื•ื˜ื•ืžื˜ื™ืช

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

sub c_my_icmd { # ืžืงืจื” ืงืœื˜ ื˜ื™ืคื•ืกื™ ืขื 2 ืืคืฉืจื•ื™ื•ืช
ืžืงื•ืžื™ @ARGV = @_;
my( $short, $long );
Mpp::Cmds::frame {

... ืชืขืฉื” ืžืฉื”ื• ื›ืืŸ ืขื <>

} qw(i I rs), # s ืžืฆื™ื™ืŸ ืจืง --ืžืคืจื™ื“, ืœื -s
[qw(s short), \$short], # No option arg -> $short == 1
[qw(l long), \$long, 1, sub { warn "got arg $long"}];
}

ื›ืืŸ ืžื’ื™ืขื” ืคืงื•ื“ื” ืคืฉื•ื˜ื” ืืฉืจ ืžืขืœื” ืจืง ืืช ื”ืชื• ื”ืจืืฉื•ืŸ ืฉืœ ื›ืœ ืงืœื˜
ืจืฉื•ืžื” (ืฉื•ื•ื” ืœ-"&sed '$$_ = "\u\L$$_"'"):

sub c_uc {
ืžืงื•ืžื™ @ARGV = @_;
Mpp::Cmds::frame {
ื”ื“ืคืก "\u\L$_" ื‘ื–ืžืŸ <>;
} 'f', qw(i I o O rs);
}

ื‘ืชื•ืš ื”ื‘ืœื•ืง ื”ืžื˜ื•ืคืœ ืขืœ ื™ื“ื™ ืžืกื’ืจืช, ืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ื‘ืœื•ืงื™ื ืžืงื•ื ื ื™ื ืœื‘ื™ืฆื•ืข ืงืจื™ื˜ื™
ืคืขื•ืœื•ืช, ื›ืžื• ืคืชื™ื—ืช ืงื‘ืฆื™ื ืื—ืจื™ื.

Mpp::Cmds::perform { ... } 'ื”ื•ื“ืขื”';

ื–ื” ื™ื•ืฆื™ื ื”ื•ื“ืขื” ืขื "--verbose" (ืฉื›ืœ ืคืงื•ื“ื” ืžืงื‘ืœืช) ืื ื”
ื”ืคืงื•ื“ื” ืžื•ืคืขืœืช ื‘ื”ืฆืœื—ื”. ืื‘ืœ ืื ื”ื‘ืœื•ืง ืžื•ืขืจืš ื›ืฉืงืจื™, ื”ื•ื ืžืช ืขื
ื”ื•ื“ืขื” ืžื‘ื•ื˜ืœืช.

ืœึธืจื•ึผืฅ ืชืกืจื™ื˜ ื•ื™ื›ื•ื—ื™ื ...
ื–ื•ื”ื™ ืคื•ื ืงืฆื™ื™ืช Perl ืจื’ื™ืœื” ืฉืชื•ื›ืœ ืœื”ืฉืชืžืฉ ื‘ื” ื‘ื›ืœ ื”ืงืฉืจ ืฉืœ Perl ื‘ืชื•ืš ื”-makefile ืฉืœืš.
ื–ื” ื“ื•ืžื” ืœืฆื•ืจืช ื”ืžืขืจื›ืช ืžืจื•ื‘ืช ื˜ื™ืขื•ื ื™ื, ืื‘ืœ ื”ื•ื ืžืจื™ืฅ ืืช ื”ืกืงืจื™ืคื˜ ืฉืœ Perl ื‘ืชื•ื›ื•
ื”ืชื”ืœื™ืš ื”ื ื•ื›ื—ื™. ืขื‘ื•ืจ ื”ืฆื”ืจื•ืช makepp, ืคื•ื ืงืฆื™ื™ืช perl ืื• ืคื•ื ืงืฆื™ื•ืช ืžืฉืœืš
ื–ื” ื”ืชื”ืœื™ืš ืฉืžืจื™ืฅ makepp. ืื‘ืœ ืขื‘ื•ืจ ื›ืœืœ ื–ื” ืชื”ืœื™ืš ื”ืžืฉื ื” ืฉืžื‘ืฆืข
ื–ื”. ื”ืชืกืจื™ื˜ ืžื ื•ืชื— ื›ืžื” ืคืขืžื™ื ืฉื”ื•ื ื ืงืจื, ืื‘ืœ ืืชื” ื™ื›ื•ืœ ืœืฉื™ื ืืช ื”ืืžื™ืชื™
ืœืขื‘ื•ื“ ืœืชื•ืš lib, ื›ืคื™ ืฉืขื•ืฉื” pod2html. ืื– lib ื–ื” ื™ื›ื•ืœ ืœื”ืชืจื’ืœ ื‘ืจืžื” ื”ืขืœื™ื•ื ื”, ืื–
ืฉื–ื” ื›ื‘ืจ ืงื™ื™ื:

perl { use mylib } # ืžืชืคืฆืœ ืœื›ืœ ื”ื›ืœืœื™ื ืฉืื™ื ื ืฆืจื™ื›ื™ื ืœืฉื ื•ืช ืืช ื–ื”

%.out: %.in
makeperl { ื”ืจืฅ qw'myscript -o $(ืคืœื˜) $(ืงืœื˜)' }

ืื ื”ืกืงืจื™ืคื˜ ืงื•ืจื "ื™ืฆื™ืื”", ืกื•ื’ืจ ืžืชืืจื™ ืงื‘ืฆื™ื ืกื˜ื ื“ืจื˜ื™ื™ื ืื• ืžืกืชืžืš ืขืœ ื”ืžืขืจื›ืช
ื›ื“ื™ ืœื ืงื•ืช ืื—ืจื™ื• (ืคืชื•ื— ืงื‘ืฆื™ื, ื–ื™ื›ืจื•ืŸ...), ื–ื• ื™ื›ื•ืœื” ืœื”ื™ื•ืช ื‘ืขื™ื” ืขื "ื”ืคืขืœื”". ืื
ืืชื” ืงื•ืจื "ืจื•ืฅ" ื‘ืชื•ืš ื”ืฆื”ืจื•ืช ืื• ืคื•ื ืงืฆื™ื™ืช perl, makepp ื™ื›ื•ืœ ืœื”ืคืจื™ืข ืื•
ื ื™ืงื•ื™ ืžืชืจื—ืฉ ืจืง ื‘ืกื•ืฃ ื”ืžื™ื™ืงืืค.

ืื ื™ืฉ ืœืš ืื—ืช ืžื”ื‘ืขื™ื•ืช ืฉื”ื•ื–ื›ืจื• ืœืขื™ืœ, ื”ืคืขืœ ืืช ื”ืกืงืจื™ืคื˜ ื—ื™ืฆื•ื ื™ืช, ื›ืœื•ืžืจ ื”ื—ืœ ืž-
ืืช ืฉื•ืจืช ื”ืคืงื•ื“ื” ื‘ืžืงื•ื. ื‘ืžืกื’ืจืช ื›ืœืœ ื ื™ืงื•ื™ ื”ื•ื ืคื—ื•ืช ื‘ืขื™ื”, ื‘ืžื™ื•ื—ื“ ืœื
ื›ืคืขื•ืœื” ืื—ืจื•ื ื” ืฉืœ ื›ืœืœ, ืžื›ื™ื•ื•ืŸ ืฉืชื”ืœื™ืš ื”ืžืฉื ื” ืฉืœ ื”ื›ืœืœ ื™ื™ืฆื ืœืื—ืจ ืžื›ืŸ ื‘ื›ืœ ืžืงืจื”,
ืœืžืขื˜ ื‘ื•ื•ื™ื ื“ื•ืก.

ื›ืชื™ื‘ื” ืฉืึถืœึฐืšึธ ืฉืึถืœื•ึน ื—ึฒืชึดื™ืžึธื” ืฉื™ื˜ื•ืช
ืœืคืขืžื™ื ืืชื” ืจื•ืฆื” ืฉ-makepp ื™ื—ืฉื‘ ืฉื™ื˜ืช ื—ืชื™ืžื” ื‘ื˜ื›ื ื™ืงื” ืื—ืจืช. ืœ
ืœื“ื•ื’ืžื”, ื ื ื™ื— ืฉื™ืฉ ืœืš ืงื•ื‘ืฅ ื‘ื™ื ืืจื™ ืฉืชืœื•ื™ ื‘ืกืคืจื™ื™ื” ืžืฉื•ืชืคืช. ื‘ื“ืจืš ื›ืœืœ, ืื ืืชื”
ืœืฉื ื•ืช ืืช ื”ืกืคืจื™ื™ื” ื”ืžืฉื•ืชืคืช, ืื™ื ืš ืฆืจื™ืš ืœืงืฉืจ ืžื—ื“ืฉ ืงื•ื‘ืฆื™ ื”ืคืขืœื” ืฉืชืœื•ื™ื™ื ื‘ื” ืžื›ื™ื•ื•ืŸ
ื”ืงื™ืฉื•ืจ ื ืขืฉื” ื‘ื–ืžืŸ ืจื™ืฆื”. (ืขื ื–ืืช, ื™ื™ืชื›ืŸ ืฉืงื™ืฉื•ืจ ืžื—ื“ืฉ ืฉืœ ืงื•ื‘ืฅ ื”ื”ืคืขืœื”
ื™ื™ืชื›ืŸ ืฉื™ื”ื™ื” ืฆื•ืจืš, ื•ื–ื• ื”ืกื™ื‘ื” ืฉืœื ื”ืคื›ืชื™ ืืช ื–ื” ืœื‘ืจื™ืจืช ื”ืžื—ื“ืœ.) ืžื” ืฉืืชื” ืจื•ืฆื” makepp
ืœืขืฉื•ืช ื”ื•ื ืœืงื‘ืœ ืืช ืื•ืชื” ื—ืชื™ืžื” ืขื‘ื•ืจ ื”ืกืคืจื™ื™ื” ื”ืžืฉื•ืชืคืช ื’ื ืื ื”ื™ื ืžืฉืชื ื”.

ื–ื” ื™ื›ื•ืœ ืœื”ืชื‘ืฆืข ื‘ื›ืžื” ื“ืจื›ื™ื. ื”ื“ืจืš ื”ืงืœื” ื‘ื™ื•ืชืจ ื”ื™ื ืœื™ืฆื•ืจ ื—ื“ืฉ ืžืฉืœืš
ืฉื™ื˜ืช ื—ืชื™ืžื” (ื‘ื•ืื• ื ืงืจื ืœื–ื” "shared_object"). ื”ื™ื™ืช ืžืฉืชืžืฉ ื‘ืฉื™ื˜ืช ื”ื—ืชื™ืžื” ื”ื–ื•
ืจืง ืขืœ ื›ืœืœื™ื ื”ืžืงืฉืจื™ื ื‘ื™ื ืืจื™ื™ื, ื›ืžื• ื–ื”:

myprogram: *.o lib1/lib1.so lib2/lib2.so
: ื—ืชื™ืžื” shared_object
$(CC) $(inputs) -o $(output)

ื›ืขืช ืขืœื™ื ื• ืœื™ืฆื•ืจ ืืช ืฉื™ื˜ืช ื”ื—ืชื™ืžื”.

ื›ืœ ืฉื™ื˜ื•ืช ื”ื—ืชื™ืžื” ื—ื™ื™ื‘ื•ืช ืœื”ื™ื•ืช ืžื—ืœืงื” ืžืฉืœื”ืŸ, ื•ื”ืžื—ืœืงื” ื—ื™ื™ื‘ืช ืœื”ื›ื™ืœ ื›ืžื” ืžื™ื•ื—ื“ื™ื
ืคืจื™ื˜ื™ื (ืจืื” Mpp/Signature.pm ื‘ื”ืคืฆื” ืœืคืจื˜ื™ื). ืฉื ื”ื›ื™ืชื” ื—ื™ื™ื‘ ืœื”ื™ื•ืช
ืขื ืงื™ื“ื•ืžืช "Mpp::Signature::", ืื– ื‘ืžืงืจื” ื–ื” ื™ืฉ ืœืงืจื•ื ืœื›ื™ืชื” ืฉืœื ื•
"Mpp::Signature::shared_object". ืขืœื™ื ื• ืœื™ืฆื•ืจ ืงื•ื‘ืฅ ื‘ืฉื shared_object.pm ื•ืฉื™ื
ื–ื” ืœืชื•ืš ื Mpp::ื—ืชื™ืžื” ืกืคืจื™ื™ื” ืื™ืคืฉื”ื• ื‘-Perl include path; ื”ืžืงื•ื ื”ื›ื™ ืงืœ
ืขืฉื•ื™ ืœื”ื™ื•ืช ื‘ MPP/ื—ืชื™ืžื” ืกืคืจื™ื™ื” ื‘ื”ืชืงื ืช makepp (ืœืžืฉืœ,
/usr/local/share/makepp/Mpp/Signature ืื• ื”ื™ื›ืŸ ืฉื”ืชืงื ืช ืื•ืชื•).

ืœืคืจื˜ื™ื ืžื“ื•ื™ืงื™ื ืขืœ ืžื” ืฉืฆืจื™ืš ืœืขื‘ื•ืจ ื‘ืฉื™ืขื•ืจ ื–ื”, ื›ื“ืื™ ืœื‘ื“ื•ืง ื”ื™ื˜ื‘
ื”ืงื•ื‘ืฅ Mpp/Signature.pm ื•ื›ื ืจืื” ื’ื Mpp/Signature/exact_match.pm ื‘ืžื™ื™ืงืืค
ื”ืคืฆื”. ืื‘ืœ ื‘ืžืงืจื” ืฉืœื ื•, ื›ืœ ืžื” ืฉืื ื—ื ื• ืจื•ืฆื™ื ืœืขืฉื•ืช ื”ื•ื ืœืขืฉื•ืช ืฉื™ื ื•ื™ ืงื˜ืŸ ืžืื•ื“ ืœ-
ืžื ื’ื ื•ืŸ ื—ืชื™ืžื” ืงื™ื™ื; ืื ื”ืงื•ื‘ืฅ ื”ื•ื ืกืคืจื™ื™ื” ืžืฉื•ืชืคืช, ืื ื• ืจื•ืฆื™ื ืฉื™ื”ื™ื” ืงื‘ื•ืข
ื—ืชื™ืžื”, ื‘ืขื•ื“ ืฉืื ื”ืงื•ื‘ืฅ ื”ื•ื ืžืฉื”ื• ืื—ืจ, ืื ื—ื ื• ืจื•ืฆื™ื ืœื”ืกืชืžืš ืขืœ ื”ืจื’ื™ืœ ืฉืœ makepp
ืžื ื’ื ื•ืŸ ื—ืชื™ืžื”. ื”ื“ืจืš ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ ืœืขืฉื•ืช ื–ืืช ื”ื™ื ืœืจืฉืช ืž
"Mpp::Signature::c_compilation_md5", ืฉื”ื™ื ืฉื™ื˜ืช ื”ื—ืชื™ืžื” ืฉื ื‘ื—ืจืช ื‘ื“ืจืš ื›ืœืœ
ื›ืืฉืจ makepp ืžื–ื”ื” ืคืงื•ื“ืช ืงื™ืฉื•ืจ.

ืื– ื”ืงื•ื‘ืฅ Mpp/Signature/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::Signature::c_compilation_md5::signature;
# ืื ื”ืงื•ื‘ืฅ ืœื ื”ืกืชื™ื™ื ื‘-.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::ืฉื™ื˜ื•ืช ื—ืชื™ืžื” ื’ื ืฉื•ืœื˜ื•ืช ืœื ืจืง ื‘ืžื—ืจื•ื–ืช ื”ืžืฉืžืฉืช ื›ื“ื™ ืœืงื‘ื•ืข ืื ื
ื”ืงื•ื‘ืฅ ื”ืฉืชื ื”, ืื‘ืœ ื”ืืœื’ื•ืจื™ืชื ื”ืžืฉืžืฉ ืœื”ืฉื•ื•ืืช ื”ืžื—ืจื•ื–ื•ืช. ืœื“ื•ื’ืžื”, ื”
ืฉื™ื˜ืช ื”ื—ืชื™ืžื” "target_newer" ื‘ื”ืคืฆืช makepp ืจืง ื“ื•ืจืฉืช ืฉื”-
ื”ื™ืขื“ื™ื ื™ื”ื™ื• ื—ื“ืฉื™ื ื™ื•ืชืจ ืžื”ืชืœื•ืช, ื‘ืขื•ื“ ืฉืฉื™ื˜ืช ื”ื—ืชื™ืžื” "exact_match" (and
ื›ืœ ืžื” ืฉืชืœื•ื™ ื‘ื•, ื›ื’ื•ืŸ "md5" ื•-"c_compilation_md5") ืžื—ื™ื™ื‘ ืืช ื”-
ืœืงื•ื‘ืฅ ื™ืฉ ืืช ืื•ืชื” ื—ืชื™ืžื” ื›ืžื• ื‘-build ื”ืื—ืจื•ืŸ.

ื”ื ื” ื›ืžื” ืกื•ื’ื™ื ืื—ืจื™ื ืฉืœ ืฉื™ื˜ื•ืช ื—ืชื™ืžื” ืฉืขืฉื•ื™ื•ืช ืœื”ื™ื•ืช ืฉื™ืžื•ืฉื™ื•ืช ื›ื“ื™ ืœืขื–ื•ืจ ืœืš ืœื”ื‘ื™ืŸ
ื”ืืคืฉืจื•ื™ื•ืช. ืื ืžื˜ืจื” ื›ืœืœื™ืช ืžืกืคื™ืงื”, ื™ื™ืชื›ืŸ ืฉื—ืœืง ืžื”ืŸ ื™ื”ื™ื• ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ
ืžืฉื•ืœื‘ ื‘ืžื™ื™ืงืืค:

ยท ืฉื™ื˜ืช ื—ืชื™ืžื” ืœืกืคืจื™ื•ืช ืžืฉื•ืชืคื•ืช ื”ืžื—ื–ื™ืจื” ืกื›ื•ื ื‘ื™ืงื•ืจืช ืฉืœ ื›ืœ ื”ืžื™ื•ืฆืื™ื
ืกืžืœื™ื, ื•ื’ื ืืช ื›ืœ ื”ืกืžืœื™ื ืฉื”ื•ื ืฆืจื™ืš ืžืกืคืจื™ื•ืช ืื—ืจื•ืช. ื–ื” ืคื•ืชืจ ืืช
ื‘ืขื™ื” ืขื ื”ื“ื•ื’ืžื” ืฉืœืžืขืœื”, ื•ืžื‘ื˜ื™ื—ื” ืงื™ืฉื•ืจ ื ื›ื•ืŸ ื‘ื›ืœ ื”ื ืกื™ื‘ื•ืช.
ื ืขืฉื” ื ื™ืกื™ื•ืŸ ื ื™ืกื™ื•ื ื™ ืœืขืฉื•ืช ื–ืืช ื‘ื”ืคืฆืช makepp (ืจืื”
Mpp/Signature/shared_object.pm), ืื‘ืœ ื–ื” ื™ืขื‘ื•ื“ ืจืง ืขื GNU binutils ื•-ELF
ืกืคืจื™ื•ืช ื›ืจื’ืข.

ยท ืฉื™ื˜ืช ื—ืชื™ืžื” ืฉืžืชืขืœืžืช ืžื—ื•ืชืžืช ืชืืจื™ืš ืฉื ื›ืชื‘ืช ื‘ืงื•ื‘ืฅ. ืœืžืฉืœ, ืื ืืชื”
ืœื™ืฆื•ืจ ื .c ืงื•ื‘ืฅ ืื•ื˜ื•ืžื˜ื™ ื‘ืืžืฆืขื•ืช ืชื•ื›ื ื” ื›ืœืฉื”ื™ ืฉืžืชืขืงืฉืช ืœืฉื™ื ืžื—ืจื•ื–ืช
ื‘ืฆื•ืจื” ื›ื–ื•:

static char * date_stamp = "ื ื•ืฆืจ ืื•ื˜ื•ืžื˜ื™ืช ื‘-01 ื‘ืืคืจื™ืœ 2004 ืขืœ ื™ื“ื™ ืืฃ ืื—ื“";

ืืชื” ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืฉื™ื˜ืช ื—ืชื™ืžื” ืฉืžืชืขืœืžืช ืกืคืฆื™ืคื™ืช ืžืฉื™ื ื•ื™ื™ื ื‘ื—ื•ืชืžื•ืช ืชืืจื™ืš.
ืœืคื™ื›ืš, ืื ื—ื•ืชืžืช ื”ืชืืจื™ืš ื”ื™ื ื”ื“ื‘ืจ ื”ื™ื—ื™ื“ ืฉื”ืฉืชื ื”, makepp ืœื ื™ื‘ื ื” ืžื—ื“ืฉ.

ยท ืฉื™ื˜ืช ื—ืชื™ืžื” ื”ืžื—ืฉื‘ืช ืืช ื”ื—ืชื™ืžื•ืช ื‘ื“ืจืš ื”ืจื’ื™ืœื”, ืืš ืžืชืขืœืžืช ืžื”-
ืชืœื•ืช ื‘ืื“ืจื™ื›ืœื•ืช ื‘ืขืช ื”ื”ื—ืœื˜ื” ืื ืœื‘ื ื•ืช ืžื—ื“ืฉ. ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื™ืžื•ืฉื™ ืขื‘ื•ืจ
ืงื‘ืฆื™ื ื‘ืืžืช ื‘ืœืชื™ ืชืœื•ื™ื™ื ื‘ืืจื›ื™ื˜ืงื˜ื•ืจื”; ื›ืจื’ืข ืื ืืชื” ื‘ื•ื ื” ืขืœ ืืจื›ื™ื˜ืงื˜ื•ืจื” ืื—ืช,
makepp ื™ืชืขืงืฉ ืœื‘ื ื•ืช ืžื—ื“ืฉ ืืคื™ืœื• ืงื‘ืฆื™ื ื‘ืœืชื™ ืชืœื•ื™ื™ื ื‘ืืจื›ื™ื˜ืงื˜ื•ืจื” ื›ืฉืชื—ืœื™ืฃ
ืœืืจื›ื™ื˜ืงื˜ื•ืจื” ืื—ืจืช.

ยท ืฉื™ื˜ืช ื—ืชื™ืžื” ืฉื™ื•ื“ืขืช ืœื”ืชืขืœื ืžื”ืขืจื•ืช ื‘ืงื‘ืฆื™ ืœื˜ืงืก, ื›ืžื• ื”
ืฉื™ื˜ืช "c_compilation_md5" ื™ื•ื“ืขืช ืœื”ืชืขืœื ืžื”ืขืจื•ืช ื‘ืงื‘ืฆื™ C.

ยท ืฉื™ื˜ืช ื—ืชื™ืžื” ืœืฉืœื™ืคืช ืชื™ืขื•ื“ ืื•ื˜ื•ืžื˜ื™ืช ื”ื‘ื•ื“ืงืช ืจืง ืœ-
ื”ืขืจื•ืช ืฉื—ื•ืœืฅ ืชื™ืขื•ื“ ืฆืจื™ืš ื•ืžืชืขืœื ืžืฉื™ื ื•ื™ื™ื ืื—ืจื™ื ื‘ืžืงื•ืจ
ืงื•ื‘ืฅ.

ืœื ื’ืžื•ืจ
ืžืกืžืš ื–ื” ืขื“ื™ื™ืŸ ืœื ื”ืกืชื™ื™ื. ื–ื” ืฆืจื™ืš ืœื›ืกื•ืช ืื™ืš ืœื›ืชื•ื‘ ืกื•ืจืงื™ื ืžืฉืœืš ืขื‘ื•ืจ
ืœื›ืœื•ืœ ืงื‘ืฆื™ื ื•ื“ื‘ืจื™ื ื›ืืœื”.

ื”ืฉืชืžืฉ ื‘-makepp_extending ื‘ืื™ื ื˜ืจื ื˜ ื‘ืืžืฆืขื•ืช ืฉื™ืจื•ืชื™ onworks.net


ืฉืจืชื™ื ื•ืชื—ื ื•ืช ืขื‘ื•ื“ื” ื‘ื—ื™ื ื

ื”ื•ืจื“ ืืคืœื™ืงืฆื™ื•ืช Windows & Linux

  • 1
    ื‘ืกื•ื’ืจื™ื™ื
    ื‘ืกื•ื’ืจื™ื™ื
    Brackets ื”ื•ื ืงื•ื“ ืคืชื•ื— ื—ื™ื ืžื™ ื•ืžื•ื“ืจื ื™
    ืขื•ืจืš ื˜ืงืกื˜ ืฉื ื•ืฆืจ ื‘ืžื™ื•ื—ื“ ืขื‘ื•ืจ ื”ืื™ื ื˜ืจื ื˜
    ื”ืชืคืชื—ื•ืช. ื›ืชื•ื‘ ื‘-HTML, CSS ื•
    JavaScript ืขื ื›ืœื™ื ื•ื™ื–ื•ืืœื™ื™ื ืžืžื•ืงื“ื™ื ื•
    ื”ื›ื ื”...
    ื”ื•ืจื“ ืกื•ื’ืจื™ื™ื
  • 2
    ื—ื™ื ื ืžื”ื“ืจ ืคืกืงืœ
    ื—ื™ื ื ืžื”ื“ืจ ืคืกืงืœ
    ืžื”ื“ืจ ืคืกืงืœ 32/64/16 ืกื™ื‘ื™ื•ืช ืขื‘ื•ืจ
    Win32/64/CE, Linux, Mac OS X/iOS,
    ืื ื“ืจื•ืื™ื“, FreeBSD, OS/2, Game Boy
    Advance, Nintendo NDS ื•-DOS;
    ืชื•ืื ืกืžื ื˜ื™ ืขื...
    ื”ื•ืจื“ ื‘ื—ื™ื ื ืืช ืžื”ื“ืจ ืคืกืงืœ
  • 3
    ืžื™ื“ืข ืขืœ Canon EOS DIGITAL
    ืžื™ื“ืข ืขืœ Canon EOS DIGITAL
    ืœืงื ื•ืŸ ืื™ืŸ ืกืคื™ืจืช ืชืจื™ืกื™ื
    ื›ืœื•ืœ ื‘ืžื™ื“ืข EXIF โ€‹โ€‹ืฉืœ an
    ืงื•ื‘ืฅ ืชืžื•ื ื”, ื‘ื ื™ื’ื•ื“ ืœ-Nikon ื•
    ืคื ื˜ืงืก. ืื™ืŸ ืงื ื•ืŸ ืจืฉืžื™ ืžื‘ื•ืกืก
    ื™ื™ืฉื•ื ...
    ื”ื•ืจื“ ืžื™ื“ืข ืขืœ Canon EOS DIGITAL
  • 4
    rEFind
    rEFind
    rEFInd ื”ื•ื ืžื–ืœื’ ืฉืœ ืืชื—ื•ืœ rEFit
    ืžื ื”ืœ. ื›ืžื• rEFit, rEFind ื™ื›ื•ืœ
    ื–ื™ื”ื•ื™ ืื•ื˜ื•ืžื˜ื™ ืฉืœ ืืชื—ื•ืœ ื”-EFI ื”ืžื•ืชืงืŸ ืฉืœืš
    ืžืขืžื™ืกื™ื ื•ื”ื•ื ืžืฆื™ื’ GUI ื™ืคื”
    ืชืคืจื™ื˜ ืฉืœ ืืคืฉืจื•ืช ืืชื—ื•ืœ...
    ื”ื•ืจื“ ืืช rEFInd
  • 5
    ExpressLuke GSI
    ExpressLuke GSI
    ื“ืฃ ื”ื”ื•ืจื“ื” ื”ื–ื” ืฉืœ SourceForge ื”ื™ื” ืืžื•ืจ
    ืชืŸ ืœืžืฉืชืžืฉื™ื ืœื”ื•ืจื™ื“ ืืช ื”ืžืงื•ืจ ืฉืœื™ ื‘ื ื•ื™
    GSIs, ื”ืžื‘ื•ืกืกื™ื ืขืœ ื ื”ื“ืจ ืฉืœ Phhusson
    ืขึฒื‘ื•ึนื“ึธื”. ืื ื™ ื‘ื•ื ื” ื’ื Android Pie ื•ื’ื
    ืื ื“ืจื•ืื™ื“ 1...
    ื”ื•ืจื“ ืืช ExpressLuke GSI
  • 6
    ื’ืœื’ืœ ืžื•ื–ื™ืงื”
    ื’ืœื’ืœ ืžื•ื–ื™ืงื”
    Music Caster ื”ื•ื ื ื’ืŸ ืžื•ื–ื™ืงื” ืžื’ืฉ
    ืฉืžืืคืฉืจ ืœืš ืœื”ื˜ื™ืœ ืืช ื”ืžื•ื–ื™ืงื” ื”ืžืงื•ืžื™ืช ืฉืœืš ืœ-a
    ืžื›ืฉื™ืจ Google Cast. ื‘ืจื™ืฆื” ื”ืจืืฉื•ื ื”,
    ืชืฆื˜ืจืš ืœืœื—ื•ืฅ ืขืœ ื”ื—ืฅ ืฉืœืš
    ื˜ืืก...
    ื”ื•ืจื“ ืืช Music Caster
  • ืขื•ื“ ยป

ืคืงื•ื“ื•ืช ืœื™ื ื•ืงืก

Ad