เบžเบฒเบชเบฒเบญเบฑเบ‡เบเบดเบ”เบžเบฒเบชเบฒเบเบฃเบฑเปˆเบ‡เปเบญเบชเบ›เบฒเป‚เบเบ™

Ad


OnWorks favicon

makepp_cookbook - เบญเบญเบ™เบฅเบฒเบเปƒเบ™เบ„เบฅเบฒเบง

เป€เบ›เบตเบ”เปƒเบŠเป‰ makepp_cookbook เปƒเบ™ OnWorks เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบŸเบฃเบตเบœเปˆเบฒเบ™ Ubuntu Online, Fedora Online, Windows online emulator เบซเบผเบท MAC OS online emulator

เบ™เบตเป‰เปเบกเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ makepp_cookbook เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป„เบ”เป‰เปƒเบ™ OnWorks เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบŸเบฃเบตเป‚เบ”เบเปƒเบŠเป‰เบซเบ™เบถเปˆเบ‡เปƒเบ™เบซเบผเบฒเบเป†เบšเปˆเบญเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบญเบญเบ™เป„เบฅเบ™เปŒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบฑเปˆเบ™ Ubuntu Online, Fedora Online, Windows online emulator เบซเบผเบท MAC OS online emulator

เป‚เบ„เบ‡เบเบฒเบ™:

NAME


makepp_cookbook -- เบงเบดเบ—เบตเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ makefiles เบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ•เปˆเบฒเบ‡เป†

เบฅเบฒเบเบฅเบฐเบญเบฝเบ”


เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ„เบปเป‰เบ™เบžเบปเบšเบงเปˆเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบšเปเปˆเบกเบตเปƒเบœเป€เบ„เบตเบเบญเปˆเบฒเบ™เบ„เบนเปˆเบกเบทเบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบœเบฐเบฅเบดเบ”, เป€เบžเบฒเบฐเบงเปˆเบฒเป€เบงเบปเป‰เบฒเบเบปเบ‡เป„เบ›เบเบปเบ‡เบกเบฒ
เบšเปเปˆเบกเบตเปƒเบœเบชเบปเบ™เปƒเบˆเปเบ—เป‰เป†เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡ - เบžเบงเบเป€เบฎเบปเบฒเบชเบปเบ™เปƒเบˆเบžเบฝเบ‡เปเบ•เปˆเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš.
เบชเบฐเบ™เบฑเป‰เบ™ เบ›เบถเป‰เบกเบชเบนเบ”เบญเบฒเบซเบฒเบ™เบ™เบตเป‰เบˆเบถเปˆเบ‡เบ–เบทเบเบ™เบณเบกเบฒเบฅเบงเบกเบเบฑเบ™เป€เบžเบทเปˆเบญเบซเบงเบฑเบ‡เบงเปˆเบฒเบ„เบปเบ™เป€เบฎเบปเบฒเบˆเบฐเบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™
เบขเปˆเบฒเบ‡เบงเปˆเบญเบ‡เป„เบงเบˆเบฒเบเบ•เบปเบงเบขเปˆเบฒเบ‡เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™ wading เบœเปˆเบฒเบ™เบ„เบนเปˆเบกเบท. เบ™เบตเป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™เบžเบดเบก
เบ„เปเบฒเบ–เบฒเบก, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบฅเบฐเบ•เบฑเบ™ stumbling เบˆเบฐเบžเบปเบšเป€เบซเบฑเบ™เบขเบนเปˆเปƒเบ™
เบ„เปเบฒโ€‹เบ–เบฒเบกโ€‹เบ—เบตเปˆโ€‹เบ–เบทเบโ€‹เบ–เบฒเบกโ€‹เป€เบฅเบทเป‰เบญเบเป†.

เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡ เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”
Do เบ—เปˆเบฒเบ™ เบเปเปˆ เบ•เป‰เบญเบ‡เบเบฒเบ™ a เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”?

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบซเบฑเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบˆเปเบฒเบ™เบงเบ™เป‚เบกเบ”เบนเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบ, เปเบ•เปˆเบฅเบฐ
เป€เบŠเบดเปˆเบ‡เบญเบฒเปƒเบชเบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡. เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบง, เปเบ•เปˆเบฅเบฐเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเปเบกเปˆเบ™เบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡,
เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป‚เบ„เบ‡เบเบฒเบ™เบชเบธเบ”เบ—เป‰เบฒเบเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”.

เปƒเบ™เบซเบผเบฒเบเป†เบเปเบฅเบฐเบ™เบต, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ„เบดเบ”เบงเปˆเบฒเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”, เบกเบตเบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบ”เบตเบเบงเปˆเบฒ. เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”
เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เปเบ—เป‰เป†เบ–เป‰เบฒเปเบ•เปˆเบฅเบฐเป‚เบกเบ”เบนเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบซเบผเบทเบˆเบฐเบšเปเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบ„เบทเบ™เปƒเบ™เบญเบฑเบ™เบญเบทเปˆเบ™
เป‚เบ„เบ‡เบเบฒเบ™, เป€เบžเบฒเบฐเบงเปˆเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบšเบปเบเบœเปˆเบญเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เปเบฅเบฐเบšเปเปˆเบกเบต
เบ‚เปเป‰เบ”เบต. เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบกเบตเบ›เบฐเป‚เบซเบเบ”เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ•เปเปˆเป„เบ›เบ™เบตเป‰:

1. เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบกเบตเบŠเปเปˆเบ‚เบญเบ‡ subroutines เบ—เบตเปˆเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบผเบฒเบ
เป‚เบ›เบฅเปเบเบฅเบก, เปเบฅเบฐเบšเปเปˆเบกเบตเป‚เบ›เบฅเปเบเบฅเบกเปƒเบ”เปƒเบŠเป‰ 100% เบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบเปˆเบญเบ - เปเบ•เปˆเบฅเบฐเป‚เบ„เบ‡เบเบฒเบ™เปƒเบŠเป‰ a
เบŠเบธเบ”โ€‹เบเปˆเบญเบโ€‹เบ—เบตเปˆโ€‹เปเบ•เบโ€‹เบ•เปˆเบฒเบ‡โ€‹เบเบฑเบ™โ€‹. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ„เบปเบ‡เบ—เบตเปˆ (a
.a เป„เบŸเบฅเปŒ, เบซเบผเบทเป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰).

2. เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบกเบตเป‚เบกเบ”เบนเบ™เบ—เบตเปˆเบ„เบงเบ™เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบผเบฒเบ, เปเบฅเบฐเบ—เปˆเบฒเบ™
เบ•เป‰เบญเบ‡เบเบฒเบ™เป‚เบซเบผเบ”เบกเบฑเบ™เปเบšเบšเป„เบ”เบ™เบฒเบกเบดเบเป€เบžเบทเปˆเบญเปƒเบซเป‰เปเบ•เปˆเบฅเบฐเป‚เบ„เบ‡เบเบฒเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเบชเปเบฒเป€เบ™เบปเบฒเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ
เบซเปเบชเบฐเบซเบกเบธเบ”. เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เปเบšเบšเป„เบ”เบ™เบฒเบกเบดเบเบชเบฒเบกเบฒเบ”เบ›เบฐเบซเบเบฑเบ”เบžเบทเป‰เบ™เบ—เบตเปˆเป„เบŸเบฅเปŒเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰ เปเบฅเบฐเบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบเปเปˆเบ›เบฑเบšเบ›เบธเบ‡
เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบšเบปเบšเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เบชเปเบฒเป€เบ™เบปเบฒเบ‚เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เป‚เบซเบผเบ”เบชเปเบฒเบฅเบฑเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡
เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ—เบตเปˆเปƒเบŠเป‰เบกเบฑเบ™.

3. เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบกเปˆเบ™เบเบฒเบงเบซเป‰เบฒเบก, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เปเบšเปˆเบ‡เบ›เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบ•เปˆเบญเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ‚เบญเบ‡
เป‚เบ„เบ‡เบเบฒเบ™เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบเบชเบฒเบกเบฒเบ”เป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบซเปเบชเบฐเบซเบกเบธเบ”เบ„เบปเบ‡เบกเบตเบ‚เปเป‰เป€เบชเบเบ•เบปเป‰เบ™เบ•เปเบซเบ™เบถเปˆเบ‡: เปƒเบ™เบšเบฒเบ‡เบฅเบฐเบšเบปเบš (เป€เบŠเบฑเปˆเบ™ Linux), เบ„เปเบฒเบชเบฑเปˆเบ‡
เบ—เบตเปˆเบ—เปˆเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™เบซเบผเบฒเบ. เบ•เบปเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”
เปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบญเบ‡เบกเบฑเบ™. เบกเบฑเบ™ grabs เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบฑเบ™เบ„เบดเบ”เบงเปˆเบฒเบกเบฑเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบˆเบฒเบ
เปเบ•เปˆเบฅเบฐเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเป‰เบฒเบเป„เบ›เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ•เปเปˆเป„เบ›. เบ–เป‰เบฒเบšเบฒเบ‡เบซเปเบชเบฐเบซเบกเบธเบ”เบ•เปเปˆเบกเบฒเบซเบกเบฒเบเป€เบ–เบดเบ‡ a
เบชเบฑเบ™เบเบฒเบฅเบฑเบเบ—เบตเปˆเบเบฑเบ‡เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเบˆเบฒเบเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เบ•เบปเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบšเปเปˆเป„เบ”เป‰
เบฎเบนเป‰เบงเปˆเบฒเบˆเบฐเบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™เปเบฅเบฐ grab เบกเบฑเบ™เบˆเบฒเบเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™
เป€เบžเบทเปˆเบญเบฅเบฒเบเบŠเบทเปˆเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบซเบผเบฒเบเบ„เบฑเป‰เบ‡เปƒเบ™เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ linker. (เบ‚เป‰เบญเบเป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™
เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เป„เบ”เป‰เป€เบฎเบฑเบ”เบŠเป‰เปเบฒเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบชเบฒเบกเป€เบ—เบทเปˆเบญ. เป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบฎเบฑเบ”
เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบกเบฑเบโ€‹เบงเบดโ€‹เบ—เบตโ€‹เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เบ—เบตเปˆโ€‹เปเบ™เบฐโ€‹เบ™เปเบฒโ€‹เบ‚เป‰เบฒเบ‡โ€‹เบฅเบธเปˆเบกโ€‹เบ™เบตเป‰โ€‹, เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เบ•เปเปˆโ€‹เป€เบžเบตเปˆเบกโ€‹เป€เบ•เบตเบกโ€‹.)

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบกเบตเบ‚เปเป‰เป€เบชเบเบซเบผเบฒเบ. เบซเบ™เป‰เบฒเบ—เปเบฒเบญเบดเบ”, เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฅเบฑเบเบ™เป‰เบญเบ
เบŠเป‰เบฒเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ–เป‰เบฒเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป‚เบ”เบเบšเบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบญเบทเปˆเบ™, เป€เบžเบฒเบฐเบงเปˆเบฒ
เบกเบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบžเบปเบšเป€เบซเบฑเบ™เปเบฅเบฐเป‚เบซเบผเบ”. เบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบ—เบฑเบ‡เบซเบกเบปเบ”
เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡; เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบžเบฝเบ‡เปเบ•เปˆเบ„เบฑเบ”เบฅเบญเบเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰,
เบ—เปˆเบฒเบ™เบเบฑเบ‡เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ„เบฑเบ”เบฅเบญเบเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ‚เบญเบ‡เบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”. เบญเบฑเบ™เบ—เบตเบชเบฒเบก, เปƒเบ™เบšเบฒเบ‡เบฅเบฐเบšเบปเบš, เบกเบฑเบ™
เป€เบ›เบฑเบ™เบเบฒเบ™เบเบฒเบเบ—เบตเปˆเบˆเบฐเบ”เบตเบšเบฑเบเบฅเบฐเบซเบฑเบ”เบžเบฒเบเปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เบ—เบตเปˆเปเบšเปˆเบ‡เบ›เบฑเบ™เป€เบžเบฒเบฐเบงเปˆเบฒเบ•เบปเบงเบ”เบตเบšเบฑเบเบšเปเปˆเบฎเบญเบ‡เบฎเบฑเบš
เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ”เบต.

เบ–เป‰เบฒเป‚เบกเบ”เบนเบ™เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบšเปเปˆเป€เบ„เบตเบเบ–เบทเบเปƒเบŠเป‰เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบญเบทเปˆเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบตเป€เบซเบ”เบœเบปเบ™เบซเบ™เป‰เบญเบเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰
เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”: เบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เป€เบชเบเบ—เบฑเบ‡เปเบปเบ”เบ‚เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ” เปเบฅเบฐเบšเปเปˆเบกเบตเบ‚เปเป‰เบ”เบตเปƒเบ”เป†.
เป€เบ•เบฑเบเบ™เบดเบเบ—เบตเปˆเบ‚เป‰เบญเบเบกเบฑเบเปเบกเปˆเบ™เบเบฒเบ™เปƒเบŠเป‰เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เปเบšเบšเป€เบฅเบฑเปˆเบ‡เบฅเบฑเบ”, เบšเปˆเบญเบ™เบ—เบตเปˆเบกเบฑเบ™เบกเบตเบขเบนเปˆ.

เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เปƒเบ™ Linux:

my_module.o : $(filter_out my_module.o, $(wildcard *.o))
ld -r -o $(output) $(inputs)

เบชเบดเปˆเบ‡เบ™เบตเป‰เบˆเบฐเป€เบฎเบฑเบ”เบ„เบทเบเบฒเบ™เบชเป‰เบฒเบ‡เบญเบฑเบ™เบญเบทเปˆเบ™ .o เป„เบŸเบฅเปŒเป€เบญเบตเป‰เบ™เบงเปˆเบฒ my_module.o, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบ›เบฐเบเบญเบšเบ”เป‰เบงเบ
เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡ .o เป„เบŸเบฅเปŒเบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบเบ™เบตเป‰. เบ•เบปเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบˆเบฐเปเบเป‰เป„เบ‚เป€เบ›เบฑเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบ‚เบญเบ‡
เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡เบ•เบฒเบกเบ—เบตเปˆเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰, เปเบฅเบฐเบˆเบฐเบ›เปˆเบญเบเปƒเบซเป‰เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเบ–เบทเบเปเบเป‰เป„เบ‚เปƒเบ™ a
เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เบ•เปเปˆโ€‹. เปƒเบ™เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”, เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡เป‚เบ›เบผเปเบเบผเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปƒเบ™เบ—เบตเปˆเบชเบธเบ”,
เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš libmy_module.a or libmy_module.so, เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš
my_module.o. เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ .o เป„เบŸเบฅเปŒ, เบ—เปˆเบฒเบ™เบšเปเปˆเบกเบตเบšเบฑเบ™เบซเบฒเบเบฑเบšเบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบ„เปเบฒเบชเบฑเปˆเบ‡เปƒเบ™
linker เบ„เปเบฒเบชเบฑเปˆเบ‡.

เบ›เปˆเบญเบเปƒเบซเป‰ เปเบ•เปˆเบ‡เปœเป‰เบฒ เบฎเบนเบš เบญเบญเบ เบ—เบตเปˆ เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” เป‚เบกเบ”เบนเบ™ เบกเบต เบˆเปเบฒเป€เบ›เบฑเบ™

เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบตเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡, เบšเปˆเบญเบ™เบ—เบตเปˆเป‚เบ„เบ‡เบเบฒเบ™เปƒเบ”เบซเบ™เบถเปˆเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบญเบ‡เบชเบฒเบกเป„เบŸเบฅเปŒเบˆเบฒเบเบกเบฑเบ™
(เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เปเบ•เปˆเบฅเบฐเป‚เบกเบ”เบนเบ™เบ”เบฝเบง), makepp เบญเบฒเบ”เบˆเบฐเบชเบฒเบกเบฒเบ”เบ„เบดเบ”เบญเบญเบเบงเปˆเบฒเป‚เบกเบ”เบนเบ™เปƒเบ”
เบ•เป‰เบญเบ‡เบเบฒเบ™เบˆเบฒเบเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เปเบฅเบฐเบ›เบฐเบเบญเบšเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบœเบนเป‰เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡. เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบŠเปˆเบงเบเบ›เบฐเบขเบฑเบ”เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก
เป€เบงเบฅเบฒเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบžเป‰เบญเบกเบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™, เป€เบžเบฒเบฐเบงเปˆเบฒเบ—เปˆเบฒเบ™เบšเปเปˆ bother เบเบฑเบš
เบฅเบงเบšเบฅเบงเบกเป‚เบกเบ”เบนเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบชเบฐเป€เบžเบฒเบฐเบ—เบตเปˆเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆ.

เบ–เป‰เบฒเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเปˆเบฒเบ‡เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”เบชเบปเบ™เบ—เบดเบชเบฑเบ™เบเบฒเบ—เบตเปˆเบซเบ™เป‰เบฒเบ—เบตเปˆเบซเบผเบทเบŠเบฑเป‰เบ™เบฎเบฝเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบ›เบฐเบเบฒเบ”เป„เบงเป‰เปƒเบ™
เปเบŸเป‰เบก xyz.h เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เปƒเบ™เป„เบŸเบฅเปŒเปเบซเบผเปˆเบ‡เบ—เบตเปˆเบฅเบงเบšเบฅเบงเบกเบเบฑเบš xyz.o (เป€เบŠเบฑเปˆเบ™, เป€เบˆเบปเป‰เบฒ
เบขเปˆเบฒเปเบšเปˆเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบญเบญเบเป€เบ›เบฑเบ™ xyz1.o เปเบฅเบฐ xyz2.o), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป„เบ”เป‰
"$(infer_objects)" เบŸเบฑเบ‡เบŠเบฑเบ™เป€เบžเบทเปˆเบญเบšเบญเบ makepp เบ—เบตเปˆเบˆเบฐเบ”เบถเบ‡เบžเบฝเบ‡เปเบ•เปˆเป‚เบกเบ”เบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบˆเบฒเบ
เบซเปเบชเบฐเปเบธเบ”. เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ”เบตเป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เปเบ›เบเบ—เบตเปˆเบชเปเบฒเบฅเบฑเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบกเบตเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡เบซเบผเบฒเบเบชเบดเบšเป„เบŸเบฅเปŒเบฅเบงเบก.
เป‚เบ”เบเบžเบทเป‰เบ™เบ–เบฒเบ™เปเบฅเป‰เบง, "$(infer_objects)" เบเบงเบ”เป€เบšเบดเปˆเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡ .h เป„เบŸเบฅโ€‹เปŒโ€‹เบ—เบตเปˆโ€‹เบฅเบงเบกโ€‹, เปเบฅเบฐโ€‹เป€เบšเบดเปˆเบ‡โ€‹
เบชเปเบฒเบฅเบฑเบšเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™ .o เป„เบŸเบฅเปŒ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เปเบฅเบฐเป‚เบ„เบ‡เบเบฒเบ™เบขเปˆเบฒเบ‡เป„เบงเบงเบฒ
เบฎเปˆเบงเบกเบเบฑเบ™, เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ›เบฐเบซเบเบฑเบ”เป€เบงเบฅเบฒเบเบฒเบ™เบฅเบงเบšเบฅเบงเบก, เป€เบžเบฒเบฐเบงเปˆเบฒเบ—เปˆเบฒเบ™เบšเปเปˆเป€เบ„เบตเบเป€เบšเบทเปˆเบญเบ—เบตเปˆเบˆเบฐเบฅเบงเบšเบฅเบงเบกเป‚เบกเบ”เบนเบ™เบ‚เบญเบ‡
เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเป‚เบ„เบ‡เบเบฒเบ™เบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰.

เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบงเบดเบ—เบตเบ—เบตเปˆเบ‚เป‰เบญเบเปƒเบŠเป‰เบกเบฑเบ™:

my_program: $(infer_objects *.o, $(LIB1)/*.o $(LIB2)/*.o)
$(CXX) $(inputs) -o $(output) $(SYSTEM_LIBRARIES)

เบŸเบฑเบ‡เบŠเบฑเบ™ "$(infer_objects )" เบเบฑเบšเบ„เบทเบ™ argument เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบกเบฑเบ™ (เบซเบผเบฑเบ‡เบˆเบฒเบเป€เบฎเบฑเบ” wildcard
expansion on it), เปเบฅเบฐเบเบฑเบ‡เป€เบšเบดเปˆเบ‡เบœเปˆเบฒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเปƒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเบชเบญเบ‡เบ‚เบญเบ‡เบ•เบปเบ™, เบชเปเบฒเบฅเบฑเบš
เป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ„เบทเบเบฑเบ™เบเบฑเบšเบŠเบทเปˆเบ‚เบญเบ‡เบญเบฑเบ™เปƒเบ”เบ™เบถเปˆเบ‡ .h เป„เบŸเบฅเปŒเบ—เบตเปˆเบฅเบงเบกเบขเบนเปˆเปƒเบ™เป„เบŸเบฅเปŒเปƒเบ”เป†เปƒเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบกเบฑเบ™
เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡. เบ–เป‰เบฒเบžเบปเบšเป„เบŸเบฅเปŒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เป„เบŸเบฅเปŒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ.

เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡ a เป„เบŸเบŸเป‰เบฒเบชเบฐเบ–เบดเบ” เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”

เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เปเบ™เปˆโ€‹เปƒเบˆเบงเปˆโ€‹เบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบซเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบธเบ”โ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เบ•เปเปˆโ€‹เป€เบžเบตเปˆเบกโ€‹เป€เบ•เบตเบกโ€‹เปเบกเปˆเบ™โ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบซเบผเบทโ€‹
เบšเปเปˆเปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”, เบกเบตเบชเบญเบ‡เบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบกเบฑเบ™. เบซเบ™เป‰เบฒเบ—เปเบฒเบญเบดเบ”, เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡
เบšเปˆเบญเบ™เบ—เบตเปˆเป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ–เบทเบเบฅเบฐเบšเบธเป„เบงเป‰เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™:

LIBRARY_FILES = abcde

libmine.a: $(LIBRARY_FILES).o
&rm -f $(เบœเบปเบ™เบœเบฐเบฅเบดเบ”)
$(AR) cr $(output) $(inputs)
ranlib $(output) # เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™, เบ‚เบถเป‰เบ™เบเบฑเบš OS เบ‚เบญเบ‡เบ—เปˆเบฒเบ™.

&rm เปเบกเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบชเป‰เบฒเบ‡เปƒเบ™ "rm" เบ‚เบญเบ‡ makepp. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™ makefiles, เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™
เปเบ›เบเปƒเบˆเป€เบฅเบฑเบเบ™เป‰เบญเบเป‚เบ”เบเบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบตเป‰; เป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเบ–เบทเบเปƒเบŠเป‰เบเบฑเบšเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

libmine.a: $(LIBRARY_FILES).o
$(AR) ru $@ $? #เบšเปเปˆเปเบ™เบฐเบ™เบณ!!!!!!!
ranlib $(เบœเบปเบ™เบœเบฐเบฅเบดเบ”)

$ เบขเบนเปˆเปƒเบช? (เบเบฑเบ‡เป€เบญเบตเป‰เบ™เบงเปˆเบฒ "$(changed_inputs)") เปเบกเปˆเบ™เบ•เบปเบงเปเบ›เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ—เบตเปˆเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเป„เบŸเบฅเปŒเบ•เปˆเบฒเบ‡เป†
เป€เบŠเบดเปˆเบ‡เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ•เบฑเป‰เบ‡เปเบ•เปˆเบ„เบฑเป‰เบ‡เบชเบธเบ”เบ—เป‰เบฒเบเบ—เบตเปˆเบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™, เปเบฅเบฐ $@ เปเบกเปˆเบ™เบ›เบฐเบกเบฒเบ™เบ„เบทเบเบฑเบ™
เป€เบ›เบฑเบ™ "$(output)".

เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบซเบผเบฒเบ:

ยทเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเป€เบˆเบปเป‰เบฒเป€เบญเบปเบฒเป„เบŸเบฅเปŒเปเบซเบผเปˆเบ‡เบญเบญเบเบˆเบฒเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ›เบฐเบˆเบธเบšเบฑเบ™. เบกเบฑเบ™เบเบฑเบ‡เบขเบนเปˆเปƒเบ™
เบซเปเบชเบฐเปเบธเบ”, เป€เบžเบฒเบฐเบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบšเปเปˆเป„เบ”เป‰เบชเป‰เบฒเบ‡เบซเปเบชเบฐเปเบธเบ”เบ„เบทเบ™เปƒเปเปˆเบ•เบฑเป‰เบ‡เปเบ•เปˆเบ•เบปเป‰เบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบชเบดเปˆเบ‡เปƒเบ”
เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ™เบตเป‰เบˆเบฐเบกเบต stale เป„เบ”เป‰ .o เป„เบŸเบฅเปŒ, เปเบฅเบฐเบ—เบตเปˆเบชเบฒเบกเบฒเบ” screw เป€เบ–เบดเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™
เบเปเปˆเบชเป‰เบฒเบ‡. (เบ‚เป‰เบญเบเป€เบ„เบตเบเบชเบฑเบšเบชเบปเบ™เบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เป€เบกเบทเปˆเบญเบ‚เป‰เบญเบเบžเบฐเบเบฒเบเบฒเบกเป€เบญเบปเบฒเบฅเบฐเบซเบฑเบ”เบ•เบฒเบ
เบˆเบฒเบเป‚เบ„เบ‡เบเบฒเบ™: เบ‚เป‰เบญเบเบชเบทเบšเบ•เปเปˆเบฅเบถเบšเป„เบŸเบฅเปŒเปเบฅเบฐเบกเบฑเบ™เบเบฑเบ‡เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบ„เบดเบ”เบงเปˆเบฒเบฅเบฐเบซเบฑเบ”เปเบกเปˆเบ™
เบ•เบฒเบ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เป€เบกเบทเปˆเบญเบ„เบปเบ™เบญเบทเปˆเบ™เบเปเปˆเบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ„เบทเบ™เปƒเบซเบกเปˆ, เบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปƒเบ”เป†
เป€เบžเบตเปˆเบกเป€เบ•เบตเบก! เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบงเปˆเบฒเป€เบเบปเปˆเบฒ .o เป„เบŸเบฅเปŒเบเบฑเบ‡เบขเบนเปˆเปƒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™.)

เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰, เบญเบตเบ‡เบ•เบฒเบกเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบ—เบตเปˆเบˆเบฐ "ar" เปเบฅเบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™ "ar" (เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™
เปƒเบŠเป‰เบ•เบปเบงเป€เบฅเบทเบญเบ "q" เปเบ—เบ™ "r"), เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบปเบกเบเบฑเบšเบกเบตเบซเบฅเบฒเบเบฎเบธเปˆเบ™เบ‚เบญเบ‡
เบ”เบฝเบงเบเบฑเบ™ .o เบžเบฒเบเปƒเบ™ .a เป„เบŸเบฅเปŒ. เบ–เป‰เบฒเบชเบฐเบšเบฑเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบเปเบฒเบ™เบปเบ”เป‚เบฅเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, the
linker เบญเบฒเบ”เบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเบ”เบถเบ‡เบ—เบฑเบ‡เบชเบญเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ. เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเบ”เบต.

เบ™เบตเป‰เปเบกเปˆเบ™เป€เบซเบ”เบœเบปเบ™เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบญเบปเบฒเป„เบŸเบฅเปŒเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”, เปเบฅเบฐเบชเป‰เบฒเบ‡เบกเบฑเบ™เบˆเบฒเบ scratch. เบ™เบตเป‰เบˆเบฐ
เปƒเบŠเป‰เป€เบงเบฅเบฒเบ”เบปเบ™เบเบงเปˆเบฒเบเบฒเบ™เบญเบฑเบšเป€เบ”เบ”เป‚เบกเบ”เบนเบ™เปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เป€เบฅเบฑเบเบ™เป‰เบญเบ, เปเบ•เปˆเบšเปเปˆเบ”เบปเบ™เบ›เบฒเบ™เปƒเบ”; เบชเบธเบ”
เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบก, เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบ—เบตเปˆเปƒเบŠเป‰เป€เบงเบฅเบฒเบšเปเบฅเบดเป‚เบžเบเป‚เบ”เบ ar เป‚เบ„เบ‡เบเบฒเบ™เปเบกเปˆเบ™เบซเบ™เป‰เบญเบเป€เบกเบทเปˆเบญเบ›เบฝเบšเบ—เบฝเบš
เบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆ C compiler เปƒเบŠเป‰เป€เบงเบฅเบฒเปƒเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ›เบปเบเบเบฐเบ•เบด, เบชเบฐเบ™เบฑเป‰เบ™เบกเบฑเบ™เบšเปเปˆเบ„เบธเป‰เบกเบ„เปˆเบฒเบ—เบตเปˆเบˆเบฐเบเบฑเบ‡เบงเบปเบ™
เบเปˆเบฝเบงเบเบฑเบš.

ยทเบซเบ™เบถเปˆเบ‡เปƒเบ™เบงเบดเบ—เบตเบ—เบตเปˆ makepp เบžเบฐเบเบฒเบเบฒเบกเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เปเบกเปˆเบ™เบกเบฑเบ™เบˆเบฐ
เบเปเปˆเบชเป‰เบฒเบ‡เบ„เบทเบ™เปƒเบซเบกเปˆเป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ–เป‰เบฒเป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡. เปเบ•เปˆ
เปƒเบŠเป‰ $? เบ•เบปเบงเปเบ›เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบšเบฑเบ™เบซเบฒ, เป€เบžเบฒเบฐเบงเปˆเบฒเปเบ•เปˆเบฅเบฐเบ„เบฑเป‰เบ‡เบ—เบตเปˆเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡,
เบ„เปเบฒเบชเบฑเปˆเบ‡เบเปเปˆเบชเป‰เบฒเบ‡เปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. (เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบชเบฐโ€‹เบเบฑเบ”โ€‹เบเบฑเป‰เบ™โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ™เบตเป‰โ€‹
":build_check ignore_action"; เป€เบšเบดเปˆเบ‡ makepp_build_check เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”.)

ยท เบเบฒเบ™โ€‹เบ›เบฑเบšโ€‹เบ›เบธเบ‡โ€‹เบเบฒเบ™โ€‹เบฎเบงเบšโ€‹เบฎเบงเบกโ€‹เปเบ—เบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบชเป‰เบฒเบ‡โ€‹เปƒเบซเบกเปˆโ€‹เบกเบฑเบ™โ€‹เบˆเบฐโ€‹เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เป„เบ›โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™ makepp เบเบฑเบšโ€‹
เป€เบญเบปเบฒเป„เบŸเบฅเปŒเบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ build cache (เป€เบšเบดเปˆเบ‡ makepp_build_cache เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”).

เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบ—เปˆเบฒเบ™เบญเบฒเบ”เบžเบปเบšเบงเปˆเบฒเบฅเบฒเบเบŠเบทเปˆเป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเบ–เป‰เบฒเป€เบˆเบฑเบšเบ›เบงเบ”, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเบ–เป‰เบฒ a
เป‚เบ„เบ‡เบเบฒเบ™เปเบกเปˆเบ™ undergoing เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบขเปˆเบฒเบ‡เป„เบงเบงเบฒเปเบฅเบฐเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡. เบกเบฑเบ™
เบญเบฒเบ”เบˆเบฐเบ‡เปˆเบฒเบเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเปเบ—เบ™, เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

libmine.a: $(only_targets *.o)
&rm $(เบœเบปเบ™เบœเบฐเบฅเบดเบ”)
$(AR) cr $(output) $(inputs)

เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เบฑเบ‡เบซเบกเบปเบ” .o เป„เบŸเบฅเปŒเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ›เบฐเบˆเบธเบšเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”. เบ•เบปเบงเปเบ—เบ™
เบเบปเบ‡เบเบฑเบšเบญเบฑเบ™เปƒเบ”เบ™เบถเปˆเบ‡ .o เป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบขเบนเปˆเบซเบผเบทเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป„เบ”เป‰, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบกเบฑเบ™เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเป„เบŸเบฅเปŒเบšเปเปˆ
เบเบฑเบ‡เบกเบตเบขเบนเปˆ.

เบŸเบฑเบ‡เบŠเบฑเบ™ "only_targets" เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบเบปเบเป€เบงเบฑเป‰เบ™ .o เป„เบŸเบฅโ€‹เปŒโ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบ—เบตเปˆโ€‹เบชเบญเบ”โ€‹เบ„เป‰เบญเบ‡โ€‹เบเบฑเบ™โ€‹
เปเบซเบผเปˆเบ‡เป„เบŸเบฅเปŒเบญเบตเบเบ•เปเปˆเป„เบ›. เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบตเป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ xyz.c เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เป€เบžเบทเปˆเบญโ€‹เป€เบญเบปเบฒโ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹
เบซเปเบชเบฐเปเบธเบ”. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบกเบต xyz.o เป„เบŸเบฅโ€‹เปŒโ€‹เบ™เบญเบ™โ€‹เบญเป‰เบญเบกโ€‹เบ‚เป‰เบฒเบ‡โ€‹. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เปˆเบฒเบ™เบฅเบถเบš xyz.c
เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เบฅเป‰เบฒเบชเบฐเป„เบซเบก, เปเบ•เปˆเบ—เปˆเบฒเบ™เบฅเบทเบกเบฅเบถเบš xyz.o. เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™ "เบžเบฝเบ‡เปเบ•เปˆ_targets"
เปœเป‰เบฒ เบ—เบตเปˆ, xyz.o เบเบฑเบ‡เบˆเบฐเบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡ .o เป„เบŸเบฅเปŒเบฅเบงเบกเบขเบนเปˆเปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”.

เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡ a เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบง เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”

เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบฅเบฐเบšเบปเบšเบ—เบฑเบ‡เปเบปเบ”. เบ‚เป‰เบญเบเบˆเบฐเบชเบนเบ‡
เปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เปƒเบŠเป‰ libtool เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง (เป€เบšเบดเปˆเบ‡
<http://www.gnu.org/software/libtool/>), เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ„เบดเบ”เบญเบญเบเบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบกเบฑเบ™
เป€เบงเบ—เบตเบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ makefile เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบˆเบฐเบชเบทเบšเบ•เปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™
OS เบ—เบตเปˆโ€‹เปเบ•เบโ€‹เบ•เปˆเบฒเบ‡โ€‹เบเบฑเบ™โ€‹. เป€เบšเบดเปˆเบ‡เป€เบญเบเบฐเบชเบฒเบ™ libtool เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”. เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡ Makefile:

LIBTOOL := libtool

libflick.la : $(only_targets *.lo)
$(LIBTOOL) --mode=link $(CC) $(inputs) -o $(output)

%.lo : %.c
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) $(INCLUDES) -c $(input) -o $(output)

เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡ on เบซเบผเบฒเบ เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ เป€เบ„เบทเปˆเบญเบ‡ or เป€เบ„เบทเบญเบ‚เปˆเบฒเบ
เบซเบ™เบถเปˆเบ‡เปƒเบ™เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบซเบ™เป‰เบฒเบฅเปเบฒเบ„เบฒเบ™เบ—เบตเปˆเบชเบธเบ”เบเบฑเบš makefiles เปเบกเปˆเบ™เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเป€เบเบทเบญเบšเบšเปเปˆเป€เบ„เบตเบเป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™
เบชเบฐเบซเบผเบฑเบšเป„เบ›เปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบญเบทเปˆเบ™ เบซเบผเบทเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบญเบทเปˆเบ™. เบ–เป‰เบฒ makefiles เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบงเบฝเบ
เบ—เบธเบเป†เป€เบ„เบทเปˆเบญเบ‡เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เปƒเบ™เป‚เบฅเบ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบšเบฒเบ‡เบขเปˆเบฒเบ‡
script. เปเบ•เปˆเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบญเบ, เบกเบตเบซเบผเบฒเบเบงเบดเบ—เบต
เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเบซเบฒเบšเบฑเบ™เบซเบฒเบ™เบตเป‰:

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ a เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ เบ›เบฐเบเบญเบšเบ”เป‰เบงเบ เป€เบญเบเบฐเบชเบฒเบ™ in เบ—เบฑเบ‡เบซเบกเบปเบ” เป„เบ”เป‰ เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก

เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐ makefile, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเบเบญเบšเบกเบตเป€เบชเบฑเป‰เบ™เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

เบฅเบงเบกเป€เบญเบปเบฒ system_defs.mk

เป„เบŸเบฅเปŒ system_defs.mk เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบˆเบฐเบ–เบทเบเบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ„เบปเบ™
เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบซเป‰เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบ„เบทเบเบฑเบ™เปƒเบ™เบ—เบธเบเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบชเปˆ
system_defs.mk เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบชเป‰เบฒเบ‡เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต, เบซเบผเบทเบญเบทเปˆเบ™เป†เบชเบฐเบซเบ™เบญเบ‡เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบฅเบงเบก
to makepp เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเป€เบฅเบทเบญเบเป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ "-I".

เบ™เบตเป‰เปเบกเปˆเบ™เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฒเบ™เป€เบˆเบฑเบšเบ›เบงเบ”เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”, เปเบ•เปˆเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ”เบตเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบกเบตเบˆเปเบฒเบ™เบงเบ™ huge เบ‚เบญเบ‡
เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ if เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™

เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบ‚เบตเป‰เบฎเป‰เบฒเบเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”, เปเบ•เปˆเบ›เบปเบเบเบฐเบ•เบดเบกเบฑเบ™เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบ.

ifsys i386
CC := gcc
เบญเบทเปˆเบ™ ifsys sun4u
CC:=cc
เบญเบทเปˆเบ™ ifsys hpux11
CC = c89
เบชเบดเป‰เบ™เบชเบธเบ”

เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบˆเบฐโ€‹เป€เบฎเบฑเบ”โ€‹เปเบกเปˆเบ™โ€‹เป€เบžเบทเปˆเบญโ€‹เบŠเบญเบโ€‹เบซเบฒโ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบซเบผเบทโ€‹เบซเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบธเบ”โ€‹เบซเบผเบทโ€‹เบฅเบงเบกโ€‹เป€เบญเบปเบฒโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เปƒเบ™โ€‹เบ—เบตเปˆโ€‹เปเบ•เบโ€‹เบ•เปˆเบฒเบ‡โ€‹เบเบฑเบ™โ€‹
เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆ, เบญเบฒเบ”เบˆเบฐเบกเบตเบงเบดเบ—เบตเบ—เบตเปˆเบ”เบตเบเบงเปˆเบฒ (เป€เบšเบดเปˆเบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰).

เป‚เบ›เบฃเปเบเบฃเบกเบŠเบญเบเบซเบฒ, first_available, เบŠเบญเบเบซเบฒเป„เบŸเบฅเปŒ

เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ„เบปเป‰เบ™เบซเบฒเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปƒเบ™เบฅเบฐเบšเบปเบšเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒ
เป„เบŸเบฅโ€‹เปŒโ€‹เบ—เบตเปˆโ€‹เป€เบซเบกเบฒเบฐโ€‹เบชเบปเบกโ€‹. เบญเบฑเบ™เบ™เบตเป‰เบšเปเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ„เบทเบเบฑเบšเบชเบฐเบ„เบฃเบดเบš configure, เปเบ™เปˆเบ™เบญเบ™, เปเบ•เปˆเบ‚เป‰เบญเบเบžเบปเบšเบกเบฑเบ™
เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ‚เป‰เบญเบเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

CXX ;= $(find_program g++ c++ pg++ cxx CC aCC)
# เป€เบฅเบทเบญเบเป€เบญเบปเบฒ C++ compiler เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™ PATH.
# (เป‚เบ”เบเบšเบฑเบ‡เป€เบญเบตเบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบเปเบฒเบ™เบปเบ” CXX เบ—เบฑเบ‡เบซเบกเบปเบ”, เบ™เบตเป‰เปเบกเปˆเบ™
# เปเบกเปˆเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบกเบฑเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ”.)
TCL_INCLUDE ;= -I$(dir_noslash $(findfile tcl.h, \
/usr/local/stow/tcl-8.4.5-nothread/include \
/usr/include/tcl8.4 /usr/include/tcl \
/net/na1/tcl8.4a3/include /net/na1/tcl8.4a3/include))
# $(findfile ) เบŠเบญเบเบซเบฒ tcl.h เปƒเบ™เปเบ•เปˆเบฅเบฐเบญเบฑเบ™เบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰
# เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเปเบฅเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป€เบ•เบฑเบก. เบ™เบตเป‰เปเบกเปˆเบ™เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™
# เบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเป€เบฅเบทเบญเบเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเป‚เบ”เบเบเบฒเบ™เบฅเบญเบเป€เบญเบปเบฒ
# เบŠเบทเปˆเป„เบŸเบฅเปŒ (เบญเบญเบเบˆเบฒเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต) เปเบฅเบฐเบ™เปเบฒเบซเบ™เป‰เบฒเบ”เป‰เบงเบ -I.
%.o : %.cpp
$(CXX) $(CXXFLAGS) $(TCL_INCLUDE) $(input) -o $(output)

TCL_LIB ;= $((first_available
/usr/local/stow/tcl-8.4.5-nothread/lib/libtcl8.4.so
/usr/lib/libtcl8.4.so /usr/lib/libtcl.so
/net/na1/tcl8.4a3/lib/libtcl8.4.a
/net/na1/tcl8.4a3/lib/libtcl8.4.sl))
# เบŠเบญเบเบซเบฒเบšเปˆเบญเบ™เบ—เบตเปˆเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” Tcl เบขเบนเปˆ. เบ™เบตเป‰เปเบกเปˆเบ™เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡
# เบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ:
my_program : *.o
$(CXX) $(CXXFLAGS) $(inputs) -o $(output) $(TCL_LIB)

เปƒเบŠเป‰โ€‹เป€เบงโ€‹เบฅเบฒ เบ›เบฐเป‚เบซเบเบ” of Perl เบ‚เบญเบ‡ config เบ‚เปเป‰เบกเบนเบ™เบ‚เปˆเบฒเบงเบชเบฒเบ™

เป€เบ•เบฑเบเบ™เบดเบเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบžเบฝเบ‡เบžเปเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบš
เบฅเบฐเบšเบปเบšเบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เป€เบŠเบฑเปˆเบ™เบงเปˆเบฒเบกเบตเบชเบญเบ‡เป€เบ—เบปเปˆเบฒเบเบฒเบง, เบซเบผเบทเบ„เปเบฒเบชเบฑเปˆเบ‡ byte เปเบกเปˆเบ™เบซเบเบฑเบ‡. เปเบ™เบงเปƒเบ”เบเปเปˆเบ•เบฒเบก,
perl เป„เบ”เป‰เบ„เบดเบ”เป„เบฅเปˆเบชเบดเปˆเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบฅเป‰เบง, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเบ•เบญเบšเบ‚เบญเบ‡เบกเบฑเบ™.

script autoconfigure Perl เบ‚เบญเบ‡ Perl เป€เบฎเบฑเบ”เปƒเบซเป‰เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบกเบตเบขเบนเปˆเป‚เบ”เบเบœเปˆเบฒเบ™
เป„เบ”เป‰ %Config hash. เบšเปเปˆเบกเบต syntax เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡ Perl hash เป‚เบ”เบเบเบปเบ‡เปƒเบ™ makepp, เปเบ•เปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰
เบซเบผเบธเบ”เบฅเบปเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ Perl เปเบฅเบฐเบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ› scalar, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”เป‰เป‚เบ”เบเบเบปเบ‡เบˆเบฒเบ makepp:

perl_begin
# เบ”เบถเบ‡เป€เบญเบปเบฒเบ„เปˆเบฒเบญเบญเบเบˆเบฒเบ hash config.
เปƒเบŠเป‰ Config;
$CC = $Config{'cc'}; # C compiler เบ—เบตเปˆ perl เปƒเบŠเป‰;
$byteorder_flags = "-DBYTEORDER=$Config{'byteorder'}";
$longdouble_defined = $Config{'d_longdbl'} eq 'define';
$CFLAGS_for_shared_libs = $Config{'cccdlflags'};
$LDFLAGS_for_shared_libs = $Config{'ccdlflags'};
perl_end

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป„เบ”เป‰เป€เบฎเบฑเบ” 'เปƒเบŠเป‰ Config', เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ "$(perl)", เป€เบŠเบฑเปˆเบ™:
เบ™เบตเป‰:

SHARED_LIB_EXTENSION := $(perl $Config{'dlext'})

เบžเบดเบก "perldoc Config" เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบตเบ‚เปเป‰เบกเบนเบ™เปƒเบ”เปเบ”เปˆเบ—เบตเปˆเบกเบตเบœเปˆเบฒเบ™ %Config hash.

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡ Perl เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป†เป€เบŠเบฑเปˆเบ™เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบ›เบฐเป€เบžเบ”เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบก, byte
เบ„เปเบฒเบชเบฑเปˆเบ‡, เปเบฅเบฐเบชเบดเปˆเบ‡เบญเบทเปˆเบ™เป†เบ—เบตเปˆเบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบ•เป‰เบญเบ‡เบเบฒเบ™ script config เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆ. เบšเบฒเบ‡เบชเปˆเบงเบ™เบ‚เบญเบ‡
เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบกเบฑเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบ›เบฐเบเบปเบ”เบ•เบปเบงเบ‚เบญเบ‡เบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป†เปƒเบ™เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบญเบฒเบ”เบˆเบฐเบšเปเปˆเปเบกเปˆเบ™
เบ–เบทเบเบ•เป‰เบญเบ‡. เบ•เบปเบงเบขเปˆเบฒเบ‡, $Config{'cc'} เบซเบกเบฒเบเป€เบ–เบดเบ‡ C compiler เบ—เบตเปˆ perl เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบ”เป‰เบงเบ,
เป€เบŠเบดเปˆเบ‡เบญเบฒเบ”เบˆเบฐเบšเปเปˆเปเบกเปˆเบ™ C compiler เบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰. เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบกเบตเบขเบนเปˆ
เปƒเบ™เบฅเบฐเบšเบปเบšเบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เป€เบžเบฒเบฐเบงเปˆเบฒเบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡ Perl เบœเปˆเบฒเบ™เบŠเบธเบ”เบ„เบนเปˆ.

เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ เบ•เบปเบงเปเบ—เบ™
เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆ เบ—เบฑเบ‡เบซเบกเบปเบ” เป„เบŸ เบเบปเบเป€เบงเบฑเป‰เบ™ a เปเบ™เปˆเบ™เบญเบ™ เบŠเบธเบ”เบเปˆเบญเบ

เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡ Makepp เบšเปเปˆเบกเบตเบงเบดเบ—เบตเปƒเบ”เป€เบฅเบตเบเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ‚เบญเบ‡เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเป„เบŸเบฅเปŒเบ—เบฑเบ‡เปเบปเบ” เบเบปเบเป€เบงเบฑเป‰เบ™ เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™
เบเปเบฒเบ™เบปเบ”, เปเบ•เปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆ.

เบ•เบปเบงเบขเปˆเบฒเบ‡, เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบตเป‚เบ„เบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเป‚เบกเบ”เบนเบ™เปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”, เปเบ•เปˆเป€เบˆเบปเป‰เบฒเบšเปเปˆเบกเบต
เบ•เป‰เบญเบ‡เบเบฒเบ™เบฅเบงเบกเป€เบญเบปเบฒเป‚เบ„เบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบขเบนเปˆเปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”. เบ–เป‰เบฒเป‚เบ„เบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ
เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบปเบเป€เบงเบฑเป‰เบ™เบžเบงเบเป€เบ‚เบปเบฒเป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

libproduction.a: $(filter_out test*, $(wildcard *.o))

เบŸเบฑเบ‡เบŠเบฑเบ™ "$(filter)" เปเบฅเบฐ "$(filter_out)" เป€เบ›เบฑเบ™เบŠเบธเบ”เบ•เบปเบงเบเบญเบ‡เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”.
เบ—เบธเบเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเบ”เบเบฑเบ™เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปเบฅเบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡,

SUBDIRS ;= $(filter_out *test* *$(ARCH)*, $(shell find . -type d -print))
# เบชเบปเปˆเบ‡เบ„เบทเบ™เบ—เบธเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบเบ—เบตเปˆเบšเปเปˆเบกเบต
# "เบ—เบปเบ”เบชเบญเบš" เบซเบผเบท $(ARCH) เปƒเบ™เบžเบงเบเบกเบฑเบ™.

$(filter $(pasubst test_dir/test_%.o, %.o, $(wildcard test_dir/*.o)), \
$(wildcard *.o))
# เบชเบปเปˆเบ‡เบ„เบทเบ™เบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒ .o เปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™
# เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™
# test_*.o เป„เบŸเบฅเปŒเบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบ test_dir.
$(filter_out $(patsubst man/man3/%.3, %.o, $(wildcard man/man3/*.3)), \
$(wildcard *.o))
# เบชเบปเปˆเบ‡เบ„เบทเบ™เบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒ .o เปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™
# เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบšเปเปˆเบกเบตเบซเบ™เป‰เบฒเบ„เบนเปˆเบกเบท
# เบ—เบตเปˆเบกเบตเบŠเบทเปˆเป„เบŸเบฅเปŒเบ”เบฝเบงเบเบฑเบ™เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบเบ‚เบญเบ‡ man/man3.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ เป„เบ”เป‰ "$(only_targets )" เบซเบ™เป‰เบฒเบ—เบตเปˆ to เบฅเบปเบšเบฅเป‰เบฒเบ‡ stale .o เป„เบŸ

เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบซเบผเบทเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบกเบตเบ„เปเบฒเบชเบฑเปˆเบ‡เบชเป‰เบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

เป‚เบ„เบ‡เบเบฒเบ™: *.o
$(CC) $(inputs) -o $(output)

เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบ•เบญเบ™เบ™เบตเป‰เป€เบˆเบปเป‰เบฒเบฅเบถเบšเป„เบŸเบฅเปŒเปเบซเบผเปˆเบ‡. เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบฅเบทเบกโ€‹เบฅเบปเบšโ€‹เบ—เบตเปˆโ€‹เบชเบญเบ”โ€‹เบ„เป‰เบญเบ‡โ€‹เบเบฑเบ™โ€‹ .o เปเบŸเป‰เบก,
เบกเบฑเบ™เบˆเบฐเบเบฑเบ‡เบ„เบปเบ‡เบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบเบฑเบ™เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบšเปเปˆเบกเบตเบ—เบฒเบ‡เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบกเบฑเบ™เบญเบตเบเบ•เปเปˆเป„เบ›. เปƒเบ™
เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”, makepp เบญเบฒเบ”เบˆเบฐเบฎเบฑเบšเบฎเบนเป‰เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ™เบตเป‰เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปเบฅเบฐเบเบปเบเป€เบงเบฑเป‰เบ™เบกเบฑเบ™
เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ wildcard, เปเบ•เปˆเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบšเบญเบเบกเบฑเบ™เป€เบžเบทเปˆเบญเบเบปเบเป€เบงเบฑเป‰เบ™เบกเบฑเบ™เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡:

เป‚เบ›เบฃเปเบเบฃเบก: $(only_targets *.o)
$(CC) $(inputs) -o $(outputs)

Makepp เบšเปเปˆเบฎเบนเป‰เบงเบดเบ—เบตเปƒเบ”เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡ stale เป„เบ”เป‰ .o เป„เบŸเบฅเปŒเปƒเบ”เป†เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเป„เบŸเบฅเปŒเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เบกเบฑเบ™
เบซเบฒเบเป„เบ›, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบŸเบฑเบ‡เบŠเบฑเบ™ "$(only_targets )" เบˆเบฐเบเบปเบเป€เบงเบฑเป‰เบ™เบกเบฑเบ™เบญเบญเบเบˆเบฒเบเบฅเบฒเบเบŠเบทเปˆเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช.

เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ เบซเบผเบฒเบ เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต
เบซเบ™เบถเปˆเบ‡เปƒเบ™เป€เบซเบ”เบœเบปเบ™เบ•เบปเป‰เบ™เบ•เปเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™ makepp เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ‚เบญเบ‡เบซเบผเบฒเบเบ‡เปˆเบฒเบเบ”เบฒเบ
เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต. Makepp เบชเบฒเบกเบฒเบ”เบชเบปเบกเบ—เบปเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบˆเบฒเบเบซเบผเบฒเบ makefiles, เบชเบฐเบ™เบฑเป‰เบ™เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰
เบ›เบฐเบ•เบดเบšเบฑเบ”เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡เบเบฑเบšเบเบปเบ”เบฅเบฐเบšเบฝเบšเปƒเบ™ makefile เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบ‚เบถเป‰เบ™เบเบฑเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบ a
makefile เบ—เบตเปˆโ€‹เปเบ•เบโ€‹เบ•เปˆเบฒเบ‡โ€‹เบเบฑเบ™โ€‹.

เปเบกเปˆเบ™โ€‹เบซเบเบฑเบ‡ to do in เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆ of เบฎเบฝเบเบฎเป‰เบญเบ‡ เป€เบฎเบฑเบ”เปƒเบซเป‰

Makepp เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ recursive make เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™, เปเบ•เปˆเบงเปˆเบฒเบกเบฑเบ™เปเบกเปˆเบ™เปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบชเบนเบ‡
เบ—เบตเปˆเบ—เปˆเบฒเบ™ เบšเปเปˆ เปƒเบŠเป‰โ€‹เบกเบฑเบ™. เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเบšเปเปˆเบฎเบนเป‰เบงเปˆเบฒเบกเบฑเบ™เปเบกเปˆเบ™เบซเบเบฑเบ‡, เบ”เบต.

เป€เบšเบดเปˆเบ‡ "เบฅเบฐเบšเบปเบšเบ—เบตเปˆเบ”เบตเบเบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเปเบฒเบ”เบฑเบšเบŠเบฑเป‰เบ™" เปƒเบ™ makepp เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ—เปˆเบฒเบ™เบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™
เปƒเบŠเป‰ recursive make, เบซเบผเบทเบญเบทเปˆเบ™เป†เบ„เบปเป‰เบ™เบซเบฒเบขเบนเปˆเปƒเบ™เป€เบงเบฑเบšเบชเปเบฒเบฅเบฑเบš "recursive make เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป€เบ›เบฑเบ™เบญเบฑเบ™เบ•เบฐเบฅเบฒเบ".

เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ” recursive เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ "เบ—เบฑเบ‡เบซเบกเบปเบ”" เปƒเบ™เบ—เบธเบ makefile, เบกเบฑเบ™เปเบกเปˆเบ™
เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบง เบ‡เปˆเบฒเบเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเปƒเบซเป‰ makepp เบ„เบดเบ”เบญเบญเบเบงเปˆเบฒเป€เบ›เบปเป‰เบฒเปเบฒเบเปƒเบ”เบ—เบตเปˆเบˆเบฐเบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡.
เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบญเบปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™ .o เปเบฅเบฐเป„เบŸเบฅเปŒเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ”เบฝเบงเบเบฑเบ™เบเบฑเบš
makefiles, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ makepp เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบˆเบฐเบ„เบดเบ”เบญเบญเบเบงเปˆเบฒ makefiles เปƒเบ”เปเบกเปˆเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™
เบชเบดเปˆเบ‡เบ”เบฝเบงเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เปเบกเปˆเบ™เปƒเบซเป‰เบกเบตเบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป€เบฎเบฑเบ”เปƒเบซเป‰เบฅเบฒเบเบŠเบทเปˆเป„เบŸเบฅเปŒเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™
เบชเปเบฒเบฅเบฑเบšเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบชเบธเบ”เบ—เป‰เบฒเบ. เป€เบšเบดเปˆเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰.

เบซเบ™เบถเปˆเบ‡ makefile เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ เปเบ•เปˆเบฅเบฐเบ„เบปเบ™ เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต: เบเบฑเบš implicit loading

เบงเบดเบ—เบตเบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบธเบ”เปƒเบ™เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบซเบผเบฒเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเปเบกเปˆเบ™เบเบฒเบ™เปƒเบชเปˆ makefile เปƒเบ™เปเบ•เปˆเบฅเบฐเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต
เป€เบŠเบดเปˆเบ‡เบญเบฐเบ—เบดเบšเบฒเบเบงเบดเบ—เบตเบเบฒเบ™เบชเป‰เบฒเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปƒเบ™ เบซเบผเบทเบˆเบฒเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ™เบฑเป‰เบ™. เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเปƒเบชเปˆ .o เป„เบŸเบฅเปŒเปƒเบ™
เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเป„เบŸเบฅเปŒเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบฒเบ™เป‚เบซเบผเบ” implicit (เป€เบšเบดเปˆเบ‡ "เบเบฒเบ™เป‚เบซเบผเบ” implicit" เปƒเบ™
makepp_build_algorithm) เบˆเบฐเบŠเบญเบเบซเบฒ makefiles เบ—เบฑเบ‡เปเบปเบ”เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”. เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเปƒเบชเปˆเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ .o
เป„เบŸเบฅเปŒเบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ (เบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบเบ—เบตเปˆเบ‚เบถเป‰เบ™เบเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™
เบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เป„เบ”เป‰เป‚เบซเบฅเบ” makefiles เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ "load_makefile".

เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡ makefile เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบฅเปเบฒเบ”เบฑเบšเบŠเบฑเป‰เบ™เบ‚เบญเบ‡เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเปƒเบŠเป‰เบเบฒเบ™เป‚เบซเบผเบ” implicit
เป€เบžเบทเปˆเบญโ€‹เบชเป‰เบฒเบ‡โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ”เป‰เบงเบโ€‹เบซเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบธเบ”โ€‹เปเบšเปˆเบ‡โ€‹เบ›เบฑเบ™โ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบซเบผเบฒเบ (เปเบ•เปˆโ€‹เป€เบšเบดเปˆเบ‡ "เบ—เปˆเบฒเบ™โ€‹เบเปเปˆโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™ a
เบซเปเบชเบฐเบซเบกเบธเบ”?" เปƒเบ™ makepp_cookbook, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบเบฒเบ™เบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบญเบญเบเบˆเบฒเบเบŠเปเปˆเบ‚เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบฎเปˆเบงเบกเบเบฑเบ™
เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบ”เบต):

# makefile เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”:
program : main.o **/*.la # เบฅเบดเป‰เบ‡เปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เบ—เบตเปˆเปเบšเปˆเบ‡เบ›เบฑเบ™เบˆเบฒเบเบ—เบธเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบ.
$(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(inputs) -o $(output) $(LIBS)

เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เป€เบเบทเบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบ™ makefile เบฅเบฐเบ”เบฑเบšเป€เบ—เบดเบ‡. เปƒเบ™เปเบ•เปˆเบฅเบฐเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบ, เบ—เปˆเบฒเบ™
เบญเบฒเบ”เบˆเบฐเป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

# Makefile เปƒเบ™เปเบ•เปˆเบฅเบฐเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบ:
include standard_defs.mk # เบ„เบปเป‰เบ™เบซเบฒ ., .. , ../ .., เปเบฅเบฐเบญเบทเปˆเบ™เป†เบˆเบปเบ™เบเปˆเบงเบฒเบกเบฑเบ™
# เบŠเบญเบเบซเบฒเป„เบŸเบฅเปŒเบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰.
# เบเบปเบเป€เบฅเบตเบเบ„เบณเบ™เบดเบเบฒเบกเบ•เบปเบงเปเบ›เบšเบฒเบ‡เบญเบฑเบ™เบขเบนเปˆเบšเปˆเบญเบ™เบ™เบตเป‰
SPECIAL_FLAGS := -do_something_different

เปเบ•เปˆเบฅเบฐ makefile เบญเบฒเบ”เบˆเบฐเบ„เบทเบเบฑเบ™เบซเบผเบฒเบเบ–เป‰เบฒเบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ
เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™.

เปƒเบ™โ€‹เบ—เบตเปˆโ€‹เบชเบธเบ”โ€‹, เบ—เปˆเบฒเบ™โ€‹เบˆเบฐโ€‹เปƒเบชเปˆโ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹ standard_defs.mk เป„เบŸเบฅเปŒ (เป€เบŠเบดเปˆเบ‡เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™
เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”):

# เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เบปเบงเปเบ›เบ—เบปเปˆเบงเป„เบ›เปเบฅเบฐเบชเป‰เบฒเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบชเปเบฒเบฅเบฑเบšเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบฑเบ‡เบซเบกเบปเบ”.
CFLAGS := -g -O2
INCLUDE_DIR := $(find_upwards เบฅเบงเบกเบกเบต)
# เบ„เบปเป‰เบ™เบซเบฒ ., .. , ../ .., เปเบฅเบฐเบญเบทเปˆเบ™เป†เบชเปเบฒเบฅเบฑเบšเป„เบŸเบฅเปŒเบซเบผเบท
# directory เป€เบญเบตเป‰เบ™เบงเปˆเบฒเบ›เบฐเบเบญเบšเบกเบต, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบชเปˆ
# เป„เบŸเบฅเปŒเบ—เบฑเบ‡เปเบปเบ”เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบกเบตเบขเบนเปˆเปƒเบ™เบ™เบฑเป‰เบ™, เบ™เบตเป‰เบˆเบฐ
# เบŠเบญเบเบซเบฒเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ.
เบฅเบงเบกเบกเบต := -I$(INCLUDE_DIR)

%.lo : %.c
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) $(INCLUDES) -c $(input) -o $(output)

lib$(relative_to .,..).la: $(only_targets *.lo)
$(LIBTOOL) --mode=link $(CC) $(CFLAGS) -o $(output) $(inputs)
# $(relative_to.,..) เบชเบปเปˆเบ‡เบ„เบทเบ™เบŠเบทเปˆเบ‚เบญเบ‡เบ›เบฐเบˆเบธเบšเบฑเบ™
# เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบฅเบฐเบ”เบฑเบšเป€เบ—เบดเบ‡
# เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ–เป‰เบฒ makefile เบ™เบตเป‰เปเบกเปˆเบ™ xyz / Makefile,
# เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ™เบตเป‰เบˆเบฐเบชเป‰เบฒเบ‡ xyz/libxyz.la.

# เป€เบœเบตเบเปเบœเปˆเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเบ›เบฐเบเบญเบšเบกเบตเป„เบŸเบฅเปŒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”เบ›เบฐเบเบญเบšเบกเบตเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต:
$(INCLUDE_DIR)/public_%.h : public_%.h
:build_check symlnk
&ln -fr $(input) $(output)

เบซเบ™เบถเปˆเบ‡ makefile เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ เปเบ•เปˆเบฅเบฐเบ„เบปเบ™ เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต: เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™ loading

เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบญเบปเบฒโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹ .o เป„เบŸเบฅเปŒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบเบ—เบตเปˆเบ‚เบถเป‰เบ™เบเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™
เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ™เบตเป‰เบ„เบงเบ™เบˆเบฐเบ–เบทเบเบ”เบฑเบ”เปเบ›เบ‡เปƒเบซเป‰เป€เบ›เบฑเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

# makefile เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”:
MAKEFILES := $(wildcard **/Makeppfile) # เบฅเบฒเบเบเบฒเบ™เบเปˆเบญเบเบเปˆเบญเบเบ—เบฑเบ‡เปเบปเบ”เป€เบžเบทเปˆเบญ
# เป€เบญเบปเบฒ makefiles เบˆเบฒเบ.

load_makefile $(MAKEFILES) # เป‚เบซเบผเบ”เบžเบงเบเบกเบฑเบ™เบ—เบฑเบ‡เปเบปเบ”เปƒเบ™.

include standard_defs.mk # Get compile command for main.o.

เป‚เบ›เบฃเปเบเบฃเบก : $(ARCH)/main.o */**/$(ARCH)/*.la
$(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(inputs) -o $(output) $(LIBS)
# */**/$(ARCH) เบšเปเปˆเบฅเบงเบกเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบ
# $(ARCH), เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡
# เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เบ—เบตเปˆเปƒเบŠเป‰เบฎเปˆเบงเบกเบเบฑเบ™.

makefile เปเบ•เปˆโ€‹เบฅเบฐโ€‹เบ„เบปเบ™โ€‹เบˆเบฐโ€‹เบ„เบทโ€‹เบเบฑเบ™โ€‹เบเบฑเบšโ€‹เบ—เบตเปˆโ€‹เบœเปˆเบฒเบ™โ€‹เบกเบฒโ€‹:

# Makefile เปƒเบ™เปเบ•เปˆเบฅเบฐเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบ:
เบฅเบงเบกเป€เบญเบปเบฒ standard_defs.mk
# ... เปเบ—เบ™เบ•เบปเบงเบ›เปˆเบฝเบ™เป„เบ”เป‰เบ—เบตเปˆเบ™เบตเป‰

เปเบฅเบฐเบชเบธเบ”เบ—เป‰เบฒเบ, standard_defs.mk เบˆเบฐโ€‹เบกเบตโ€‹เบšเบฒเบ‡โ€‹เบชเบดเปˆเบ‡โ€‹เบšเบฒเบ‡โ€‹เบขเปˆเบฒเบ‡โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

# เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เบปเบงเปเบ›เบ—เบปเปˆเบงเป„เบ›เปเบฅเบฐเบชเป‰เบฒเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบชเปเบฒเบฅเบฑเบšเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบฑเบ‡เบซเบกเบปเบ”.
ARCH ;= $(shell uname -s)-$(shell uname -m)-$(shell uname -r)
# เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบ„เบปเบ™เปƒเบŠเป‰เบžเบฝเบ‡เปเบ•เปˆ $ (shell uname -m), เปเบ•เปˆ
# เบ™เบตเป‰เบˆเบฐเบ„เบทเบเบฑเบ™เบชเปเบฒเบฅเบฑเบš FreeBSD เปเบฅเบฐ Linux
# เป€เบ›เบฑเบ™ x86. The -r เบšเปเปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”เปเบ—เป‰เป†เปƒเบ™ Linux,
# เปเบ•เปˆเบกเบตเบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™เบชเปเบฒเบฅเบฑเบš OSes เบญเบทเปˆเบ™เป†: binaries เบชเปเบฒเบฅเบฑเบš
# เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบง SunOS 5.8 เบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™ SunOS 5.7.
&mkdir -p $(ARCH) # เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบกเบตเบขเบนเปˆ.
CFLAGS := -g -O2
INCLUDE_DIR := $(find_upwards เบฅเบงเบกเบกเบต)
# เบ„เบปเป‰เบ™เบซเบฒ ., .. , ../ .., เปเบฅเบฐเบญเบทเปˆเบ™เป†เบชเปเบฒเบฅเบฑเบšเป„เบŸเบฅเปŒเบซเบผเบท
# directory เป€เบญเบตเป‰เบ™เบงเปˆเบฒเบ›เบฐเบเบญเบšเบกเบต, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบชเปˆ
# เป„เบŸเบฅเปŒเบ—เบฑเบ‡เปเบปเบ”เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบกเบตเบขเบนเปˆเปƒเบ™เบ™เบฑเป‰เบ™, เบ™เบตเป‰เบˆเบฐ
# เบŠเบญเบเบซเบฒเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ.
เบฅเบงเบกเบกเบต := -I$(INCLUDE_DIR)

$(ARCH)/%.lo : %.c
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) $(INCLUDES) -c $(input) -o $(output)

$(ARCH)/ lib$(relative_to .,..).la: $(only_targets *.lo)
$(LIBTOOL) --mode=link $(CC) $(CFLAGS) -o $(output) $(inputs)
# $(relative_to.,..) เบชเบปเปˆเบ‡เบ„เบทเบ™เบŠเบทเปˆเบ‚เบญเบ‡เบ›เบฐเบˆเบธเบšเบฑเบ™
# เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบฅเบฐเบ”เบฑเบšเป€เบ—เบดเบ‡
# เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ–เป‰เบฒ makefile เบ™เบตเป‰เปเบกเปˆเบ™ xyz / Makefile,
# เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ™เบตเป‰เบˆเบฐเบชเป‰เบฒเบ‡ xyz/$(ARCH)/libxyz.la.

# เบ„เบฑเบ”เบฅเบญเบเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเบฅเบงเบกเป„เบŸเบฅเปŒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”เบ›เบฐเบเบญเบšเบกเบตเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต:
$(INCLUDE_DIR)/public_%.h : public_%.h
&cp $(input) $(output)

เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ” เป€เบฎเบฑเบ”เปƒเบซเป‰ เป„เบ”เป‰ makefiles

เบ–เป‰เบฒ makefiles เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบ—เบตเปˆเบชเบธเบ” (เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡), เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบšเบญเบ Makepp
เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบžเบงเบเบกเบฑเบ™เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ–เป‰เบฒเบžเบงเบเป€เบ‚เบปเบฒเบšเปเปˆเบกเบต. เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เป€เบžเบตเปˆเบกโ€‹เบเบฒเบ™โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบ”เบฑเบšโ€‹เบชเบนเบ‡โ€‹เบชเบธเบ”โ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹
makefile:

SUBDIRS := $(filter_out unwanted_dir1 unwanted_dir2, $(wildcard */**))
$(foreach)/Makeppfile: : foreach $(SUBDIRS)
&echo "include standard_defs.mk" -o $(output)
&echo "_include additional_defs.mk" -o >>$(output)
# เบ–เป‰เบฒเบกเบตเป„เบŸเบฅเปŒเป€เบžเบตเปˆเบกเป€เบ•เบตเบก_defs.mk, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™
# เบกเบฑเบ™เบˆเบฐเบ–เบทเบเบฅเบงเบก, เปเบ•เปˆเบ–เป‰เบฒเบกเบฑเบ™เบšเปเปˆเบกเบต,
# เบ„เบณเบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™ _include เบˆเบฐเบ–เบทเบเบฅเบฐเป€เบฅเบตเบ.

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™ makefiles เบ•เบปเบงเป€เบญเบ‡เบˆเบฐเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”.

เบซเบ™เบถเปˆเบ‡ makefile เบžเบฝเบ‡เปเบ•เปˆ at เป„เบ”เป‰ top เบฅเบฐเบ”เบฑเบš

เบ–เป‰เบฒ makefiles เบ—เบฑเบ‡เปเบปเบ”เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบ„เบทเบเบฑเบ™, เป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเบ–เบฒเบกเบงเปˆเบฒ: เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ‚เป‰เบญเบเบˆเบถเปˆเบ‡เบ•เป‰เบญเบ‡เบกเบต makefile เปเบ•เปˆเบฅเบฐเบญเบฑเบ™
เบฅเบฐเบ”เบฑเบš? เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบˆเบถเปˆเบ‡เบšเปเปˆเป€เบญเบปเบฒเบชเบดเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ makefile เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”?

เปเบกเปˆเบ™เปเบฅเป‰เบง, เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰. เบ‚เปเป‰เป€เบชเบเบ•เบปเป‰เบ™เบ•เปเปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบเบฒเบ™เบเบฒเบเบ—เบตเปˆเบˆเบฐเบฅเบฐเบšเบธ
เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐ subdirectory. เบ‚เปเป‰โ€‹เป€เบชเบโ€‹เบ—เบตเปˆโ€‹เบชเบญเบ‡โ€‹เปเบกเปˆเบ™โ€‹เบงเปˆเบฒโ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹
makefile เบญเบฒเบ”เบˆเบฐเบญเปˆเบฒเบ™เบเบฒเบเบเบงเปˆเบฒ.

เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบžเบฝเบ‡เปเบ•เปˆเบงเปˆเบฒ:

# makefile เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบฅเปเบฒเบ”เบฑเบšเบŠเบฑเป‰เบ™เบ‚เบญเบ‡เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต. เบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™
# เบญเบญเบเบˆเบฒเบเบŠเบธเบ”เบ‚เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเปƒเบŠเป‰เบฎเปˆเบงเบกเบเบฑเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡. (เป€เบšเบดเปˆเบ‡เบ„เปเบฒเป€เบ•เบทเบญเบ™เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡
# เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เปเบšเบšเป€เบžเบตเปˆเบกเบซเบผเบทเบšเบฒเบ‡เบญเบฑเบ™
# เบงเบดเบ—เบตเบเบฒเบ™เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบฎเปˆเบงเบกเบเบฑเบ™.)
makepp_percent_subdirs := 1 # เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰ % เบเบปเบ‡เบเบฑเบšเบซเบผเบฒเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต.
SUBDIRS := $(filter_out *CVS* other-unwanted_dirs $(wildcard **))
CFLAGS := -g -O2
เบฅเบงเบกเบกเบต := -Includes

%.lo: %.c
$(LIBTOOL) --mode=compile $(CC) $(INCLUDES) $(CFLAGS) -c $(input) -o $(output)

$(foreach)/ lib$(notdir $(foreach)).la: $(foreach)/*.lo : foreach $(SUBDIRS)
$(LIBTOOL) --mode=link $(CC) $(CFLAGS) -o $(output) $(inputs)
# เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”.

เป‚เบ›เบฃเปเบเบฃเบก : main.o **/*.la
$(LIBTOOL) --mode=link $(CC) $(CFLAGS) -o $(output) $(inputs)

include/$(notdir $(foreach)): $(foreach): foreach **/public_*.h
&cp $(input) $(output)
# เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ„เบฑเบ”เบฅเบญเบเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ
# เป„เบŸเบฅเปŒ .h เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”เป‰เปƒเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡.

A เป€เบฎเบฑเบ”เบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ” เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบ

makefiles เปเบšเบšเบ”เบฑเป‰เบ‡เป€เบ”เบตเบกเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเบชเบฐเบญเบฒเบ”, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เป€เบญเบปเบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเป€เบ›เบฑเบ™
เบชเป‰เบฒเบ‡. เบกเบตเบชเบฒเบกเป€เบซเบ”เบœเบปเบ™เบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ—เปˆเบฒเบ™เบšเปเปˆเบ„เบงเบ™เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เบเบฑเบš makepp:

1. Makepp เป„เบ›เบชเบนเปˆเบ„เบงเบฒเบกเบเบฒเบงเบซเบผเบฒเบเป€เบžเบทเปˆเบญเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡. เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™โ€‹เบœเบนเป‰โ€‹เบ—เบตเปˆโ€‹เบชเบดเป‰เบ™โ€‹เบซเบงเบฑเบ‡ "เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰
เบฎเบนเป‰เบงเปˆเบฒเปเบกเปˆเบ™เบซเบเบฑเบ‡เบœเบดเบ”", เบเบฒเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบฒเบ scratch เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ.

2. เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบ„เบปเบ™เป€เบฎเบปเบฒเบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเบ›เบฐเบขเบฑเบ”เป€เบงเบฅเบฒเป‚เบ”เบเบเบฒเบ™เป€เบฎเบฑเบ”เบชเบญเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบ‚เบฑเบ”เบเบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™:
"เป€เบฎเบฑเบ”เปƒเบซเป‰เบชเบฐเบญเบฒเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”". เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบชเบฑเบšเบชเบปเบ™เบฅเบฐเบšเบปเบš wildcard smart เบ‚เบญเบ‡ makepp, เป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เบˆเบฐ
เบ—เปเบฒเบญเบดเบ”เป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบˆเบดเบ‡เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบซเบเบฑเบ‡. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบชเบฐเบญเบฒเบ”, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”
เบขเปˆเบฒเบšเบญเบ makepp เบงเปˆเบฒเบกเบฑเบ™เป€เบฎเบฑเบ”เบซเบเบฑเบ‡ (เปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบงเบกเบฑเบ™เป€เบฎเบฑเบ”เบšเปเปˆเป„เบ”เป‰, เป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เบเบปเบเป€เบฅเบตเบเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡ - the
เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบกเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบชเป‰เบฒเบ‡เปเบกเปˆเบ™เบชเปเบฒเบฅเบฑเบš). เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบกเบฒ "เบ—เบฑเบ‡เบซเบกเบปเบ”", เปเบ•เปˆเป„เบŸเบฅเปŒเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบก,
เบšเปˆเบญเบ™เบ—เบตเปˆเบกเบต, เบซเบฒเบเป„เบ›เบขเปˆเบฒเบ‡เบฅเบถเบเบฅเบฑเบš.

3. เบกเบตเบ„เปเบฒเบชเบฑเปˆเบ‡ "makeppclean", เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™, เปเบฅเบฐเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบถเป‰เบ™.

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบ„เบปเบ‡เบฎเบฑเบเบชเบฒเบžเบฒเบเบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ™เบตเป‰, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เบšเบญเบเบ—เปˆเบฒเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบเปˆเบฝเบงเบเบฑเบš
เบงเบดเบ—เบตเบเบฒเบ™ makepp เป€เบฎเบฑเบ”เบงเบฝเบ: เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ phony เป€เบญเบตเป‰เบ™เบงเปˆเบฒ "เบชเบฐเบญเบฒเบ”" เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบŠเบทเปˆเบชเปเบฒเบฅเบฑเบšเบŠเบธเบ”เบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบˆเบฐ
เป€เบญเบปเบฒเป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบกเบฒเบˆเบฒเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”. เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเบชเบฐเบญเบฒเบ”เป€เบšเบดเปˆเบ‡
เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

$(เบฅเป‰เบฒเบ‡โ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”):
&rm -fm $(wildcard *.o .makepp_log)
# -m เปเบฅเบฐ .makepp_log เบเปเบฒเบˆเบฑเบ”เบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบ—เบฑเบ‡เปเบปเบ”เบ‚เบญเบ‡ makepp.

เปเบ—เบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบฅเบฒเบโ€‹เบŠเบทเปˆโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบฅเบถเบšโ€‹เบขเปˆเบฒเบ‡โ€‹เบŠเบฑเบ”โ€‹เป€เบˆเบ™โ€‹, เบ—เปˆเบฒเบ™โ€‹เบเบฑเบ‡โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบšเบญเบ makepp เบเบฑเบšโ€‹
เป€เบญเบปเบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบกเบฑเบ™เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบชเป‰เบฒเบ‡, เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

$(เบฅเป‰เบฒเบ‡โ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”):
&rm -fm .makepp_log $(only_targets *)

เบ™เบตเป‰เบกเบตเบ›เบฐเป‚เบเบ”เบ—เบตเปˆเบงเปˆเบฒเบ–เป‰เบฒเป„เบŸเบฅเปŒเปƒเบ”เป†เบ‚เบญเบ‡เปเบซเบผเปˆเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบˆเบฒเบเป„เบŸเบฅเปŒเบญเบทเปˆเบ™เป†,
เบžเบงเบเบกเบฑเบ™เบˆเบฐเบ–เบทเบเบฅเบถเบšเบ„เบทเบเบฑเบ™; เปƒเบ™เบญเบตเบเบ”เป‰เบฒเบ™เบซเบ™เบถเปˆเบ‡, stale .o เป„เบŸเบฅเปŒ (เป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบ„เบตเบเป€เบ›เบฑเบ™
buildable เปเบ•เปˆโ€‹เบงเปˆเบฒโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบ—เบตเปˆโ€‹เบกเบฒโ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบฅเบปเบšโ€‹เบญเบญเบโ€‹เบ™เบฑเบšโ€‹เบ•เบฑเป‰เบ‡โ€‹เปเบ•เปˆโ€‹) เบˆเบฐโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบฅเบถเบšโ€‹.

เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบเปเปˆโ€‹เบชเป‰เบฒเบ‡โ€‹เบ—เบตเปˆโ€‹เบเปˆเบฝเบงโ€‹เบ‚เป‰เบญเบ‡โ€‹เบเบฑเบš makefiles เปƒเบ™โ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เบ—เบตเปˆโ€‹เปเบ•เบโ€‹เบ•เปˆเบฒเบ‡โ€‹เบเบฑเบ™โ€‹เบซเบผเบฒเบโ€‹, เบ—เบฒเบ‡โ€‹เป€เบ—เบดเบ‡โ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹.
makefile เบฅเบฐเบ”เบฑเบšเบญเบฒเบ”เบˆเบฐเบญเป‰เบฒเบ‡เป€เบ–เบดเบ‡เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ "เบชเบฐเบญเบฒเบ”" (เบซเบผเบทเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ phony เบญเบทเปˆเบ™เป†) เปƒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™
makefile:

# makefile เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”
SUBDIRS := sub1 sub2

# เบชเป‰เบฒเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰

# เบญเบฐเบ™เบฒเป„เบกเบซเบผเบฑเบ‡เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡:
$(phony clean): $(SUBDIRS)/เบชเบฐเบญเบฒเบ”
&rm -fm .makepp_log $(only_targets *)

เบญเบตเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบงเบฒเบ‡เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ "เบชเบฐเบญเบฒเบ”" เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปƒเบ™ makefile เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”, เปเบฅเบฐเบกเบตเบกเบฑเบ™
เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต, เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

$(เบฅเป‰เบฒเบ‡โ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”):
&rm -fm $(เบžเบฝเบ‡_เป€เบ›เบปเป‰เบฒเปเบฒเบ **/*)

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ Qt เบ‚เบญเบ‡ เบก เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบเปˆเบญเบ™
เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™ makefile เบชเปเบฒเบฅเบฑเบšเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบ™เปเบฒเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” Qt GUI เบ‚เบญเบ‡ Nokia (เป€เบšเบดเปˆเบ‡
<http://qt.nokia.com>). เบชเบดเปˆเบ‡เบ”เบฝเบงเบ—เบตเปˆเบœเบดเบ”เบ›เบปเบเบเบฐเบ•เบดเป€เบฅเบฑเบเบ™เป‰เบญเบเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เปเบกเปˆเบ™เป€เบˆเบปเป‰เบฒ
เบ•เป‰เบญเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ preprocessor เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ "moc" เปƒเบ™เป„เบŸเบฅเปŒ ".h" เบชเปˆเบงเบ™เปƒเบซเบเปˆเบ—เบตเปˆเบกเบตเบ„เปเบฒเบ™เบดเบเบฒเบก widget,
เปเบ•เปˆเบ—เปˆเบฒเบ™เบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เปเบฅเปˆเบ™ "moc" เปƒเบ™เป„เบŸเบฅเปŒ ".h" เปƒเบ”เป†เบเปเบ•เบฒเบกเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰เบกเบฒเป‚เบ„เบฃ "Q_OBJECT".

เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ” เบเบฒเบ™ เบเบณ เบ™เบปเบ” เบ—เบตเปˆ เป„เบŸ เบ•เป‰เบญเบ‡เบเบฒเบ™ เบก เป„เบŸ

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”, เปเบ™เปˆเบ™เบญเบ™, เบžเบฝเบ‡เปเบ•เปˆเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เป„เบŸเบฅเปŒ ".h" เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบต "moc" เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ.
เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒ widget เปƒเบซเบกเปˆเบขเปˆเบฒเบ‡เป„เบงเบงเบฒ, เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบฅเบปเบšเบเบงเบ™
เบชเบทเบšเบ•เปเปˆเบ›เบฑเบšเบ›เบธเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเปƒเบ™ makefile. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบ›เบฐเบกเบฒเบ™เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบฅเบฒเบเบŠเบทเปˆ moc เป„เบ”เป‰
เป‚เบกเบ”เบนเบ™เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เบเบฑเบšเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

MOC := $(QTDIR)/bin/moc
เป‚เบกเบ”เบนเบ™ := เป‚เบกเบ”เบนเบ™เปƒเบ”เบเปเปˆเบ•เบฒเบกเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบกเบตเบขเบนเปˆเปƒเบ™เป‚เบ›เบผเปเบเบผเบกเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ
MOC_MODULES := $(patsubst %.h, moc_%, $(&grep -l /Q_OBJECT/ *.h))
# เบชเบฐเปเบเบ™เป„เบŸเบฅเปŒ .h เบ—เบฑเบ‡เปเบปเบ”เบชเบณเบฅเบฑเบš Q_OBJECT macro.

my_program: $(MODULES).o $(MOC_MODULES).o
$(CXX) $(inputs) -o $(output)

moc_%.cxx: %.h # เป€เบฎเบฑเบ”เปƒเบซเป‰เป„เบŸเบฅเปŒ moc เบˆเบฒเบเป„เบŸเบฅเปŒ .h.
$(MOC) $(input) -o $(output)

%.o: %.cxx
$(CXX) $(CXXFLAGS) -c $(input) -o $(output)

เบงเบดเบ—เบตเบ™เบตเป‰เบชเบฐเปเบเบ™เปเบ•เปˆเบฅเบฐเบญเบฑเบ™เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ .h เป„เบŸเบฅเปŒเบ—เบธเบเบ„เบฑเป‰เบ‡เบ—เบตเปˆ makepp เบ–เบทเบเปเบฅเปˆเบ™, เบŠเบญเบเบซเบฒ
"Q_OBJECT" เบกเบฐเบซเบฒเบžเบฒเบ. เบŸเบฑเบ‡เบ„เบทเบงเปˆเบฒเปเบžเบ‡, เปเบ•เปˆเบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเปƒเบŠเป‰เป€เบงเบฅเบฒเบšเปเปˆเบ”เบปเบ™. (เป„เบ”เป‰ .h
เป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบ–เบทเบเป‚เบซเบฅเบ”เบˆเบฒเบเปเบœเปˆเบ™เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบกเป‚เบ”เบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเบกเบฑเบ™เบˆเบฐ
เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰.)

#include เป„เบ”เป‰ .moc เป€เบญเบเบฐเบชเบฒเบ™

เบงเบดเบ—เบตเบเบฒเบ™เบญเบทเปˆเบ™เปเบกเปˆเบ™เป€เบžเบทเปˆเบญ "#include" เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบˆเบฒเบ preprocessor "moc" เปƒเบ™ widget เบ‚เบญเบ‡เบ—เปˆเบฒเบ™.
เป€เบญเบเบฐเบชเบฒเบ™เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบˆเบทเปˆเบˆเปเบฒเบ—เบตเปˆเบˆเบฐเบ‚เบฝเบ™ "#include", เปเบ•เปˆเบกเบฑเบ™เบกเบต
เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบกเบตเป‚เบกเบ”เบนเบ™เบซเบ™เป‰เบญเบเบ—เบตเปˆเบˆเบฐเบฅเบงเบšเบฅเบงเบก, เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเป„เบงเบ‚เบถเป‰เบ™.
(เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฅเบงเบšเบฅเบงเบก C ++ เบชเปˆเบงเบ™เปƒเบซเบเปˆ, เป€เบงเบฅเบฒเบชเปˆเบงเบ™เปƒเบซเบเปˆเปƒเบŠเป‰เป€เบงเบฅเบฒเปƒเบ™เบเบฒเบ™เบญเปˆเบฒเบ™เป„เบŸเบฅเปŒ header, เปเบฅเบฐ
เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบˆเบฒเบเป‚เบ›เป€เบŠเบ”เป€เบŠเบต preprocessor เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ›เบฐเบเบญเบšเบกเบตเป„เบŸเบฅเปŒเป€เบเบทเบญเบšเบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเป€เบ—เบปเปˆเบฒเบเบฑเบš widget เบ‚เบญเบ‡เบ—เปˆเบฒเบ™
เปเบฅเป‰เบง.) เบ•เบปเบงเบขเปˆเบฒเบ‡:

// my_widget.h
class MyWidget : public QWidget {
Q_OBJECT
//...
}

// my_widget.cpp

#เบฅเบงเบกเบ—เบฑเบ‡ "my_widget.h"
#include "my_widget.moc" // my_widget.moc เปเบกเปˆเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบˆเบฒเบ
// moc preprocessor.
// เบชเบดเปˆเบ‡เบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบญเบทเปˆเบ™เป†เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰.
MyWidget::MyWidget(QWidget * parent, const char * name):
QWidget(เบžเปเปˆเปเบกเปˆ, เบŠเบทเปˆ)
{
//...
}

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเบเบปเบ”เบฅเบฐเบšเบฝเบšเปƒเบ™ makefile เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เป„เบŸเบฅเปŒ ".moc", เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

MOC := $(QTDIR)/bin/moc
# เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒ .moc:
%.moc: %.h
$(MOC) $(input) -o $(output)

Makepp เบกเบตเบ„เบงเบฒเบกเบชเบฐเบซเบผเบฒเบ”เบžเปเบ—เบตเปˆเบˆเบฐเบฎเบนเป‰เบงเปˆเบฒเบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡ "my_widget.moc" เบ–เป‰เบฒเบกเบฑเบ™เบšเปเปˆเบกเบต
เบกเบตเบขเบนเปˆเปเบฅเป‰เบง, เบซเบผเบทเบ–เป‰เบฒเบกเบฑเบ™เบฅเป‰เบฒเบชเบฐเป„เบซเบก.

เบงเบดเบ—เบตเบ—เบตเบชเบญเบ‡เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบ‚เป‰เบญเบเปƒเบŠเป‰เป€เบฅเบทเป‰เบญเบเป†เป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™.

เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™ เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ เบšเปเปˆเป€เบซเบฑเบ™เปเบเปˆเบ•เบปเบง เป€เบฎเบฑเบ”เปƒเบซเป‰ เบชเปเบฒเบ™เบงเบ™
MAKECMDGOALS

เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบ„เบปเบ™เบกเบตเบเบปเบ”เบฅเบฐเบšเบฝเบšเปƒเบ™ makefile เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบ‚เบถเป‰เบ™เบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบเปเบฒเบฅเบฑเบ‡เบชเป‰เบฒเบ‡,
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเปเบ›เบžเบดเป€เบชเบ” "MAKECMDGOALS". เบ•เบปเบงเบขเปˆเบฒเบ‡, เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบ„เบปเบ™เบซเบ™เบถเปˆเบ‡เป€เบซเบฑเบ™เบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป†เป€เบŠเบฑเปˆเบ™
เบ™เบตเป‰:

ifneq ($(เบเบฒเบ™เบœเบฐเบฅเบดเบ”เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡, $(MAKECMDGOALS)),)
CFLAGS := -O2
เบญเบทเปˆเบ™
CFLAGS := -g
เบชเบดเป‰เบ™เบชเบธเบ”

เบ™เบตเป‰เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ”เบตเบเบฑเบš makepp. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบšเปเปˆเปƒเบŠเป‰ "MAKEMDGOALS" เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง
เบเปเบฅเบฐเบ™เบต (เปเบฅเบฐ GNU เบเปเปˆเป€เบฎเบฑเบ”เบ„เบนเปˆเบกเบท). เบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบ”เบตเบเบงเปˆเบฒเบเบฒเบ™เบงเบฒเบ‡ optimized เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐ
debug-compiled .o เป„เบŸเบฅเปŒเบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, เบซเบผเบทเปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒเบกเบตเบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบผเบท
suffixes, เบซเบผเบทเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ repositories, เป€เบžเบทเปˆเบญเบฎเบฑเบเบชเบฒเปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ.

เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡ "MAKECMDGOALS" เปเบกเปˆเบ™เบ–เป‰เบฒเบกเบฑเบ™
เปƒเบŠเป‰เป€เบงเบฅเบฒเบ”เบปเบ™เปƒเบ™เบเบฒเบ™เป‚เบซเบผเบ” makefiles เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เปเบฅเบฐเบ—เปˆเบฒเบ™เบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™เบชเปเบฒเบฅเบฑเบš "เบชเบฐเบญเบฒเบ”" เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™
(เปเบ•เปˆเบ—เปˆเบฒเบ™เบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเบชเบฐเบญเบฒเบ”). เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡,

ifneq ($(MAKECMDGOALS),เบชเบฐเบญเบฒเบ”)
load_makefile $(wildcard **/Makeppfile)
เบญเบทเปˆเบ™
no_implicit_load . # เบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เป‚เบซเบผเบ”เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ‚เบญเบ‡ makefiles เบญเบทเปˆเบ™เป†.
เบชเบดเป‰เบ™เบชเบธเบ”

$(เบฅเป‰เบฒเบ‡โ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”):
&rm -f $(wildcard **/*.o)

เบ›เบฐเบเบปเบ”เบ•เบปเบง เป€เบฎเบฑเบ”เปƒเบซเป‰ to เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡ in เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต

เป€เบšเบดเปˆเบ‡ "เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบชเปเบฒเบฅเบฑเบšเบซเบผเบฒเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต" เปƒเบ™ makepp_cookbook.

เบ›เบฐเบเบปเบ”เบ•เบปเบง เป€เบฎเบฑเบ”เปƒเบซเป‰ to เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡ เบกเบนเบ™เบ„เปˆเบฒ of a เบ•เบปเบงเปเบ›

เบšเบฒเบ‡ makefiles reinvoke เบ•เบปเบงเป€เบญเบ‡เบ”เป‰เบงเบเบ„เปˆเบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบญเบ‡เบ•เบปเบงเปเบ›, เป€เบŠเบฑเปˆเบ™: debug
เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเปƒเบ™เบŠเบดเป‰เบ™ makefile เบ•เปเปˆเป„เบ›เบ™เบตเป‰

.PHONY: เบ”เบตเบšเบฑเบเบ—เบฑเบ‡เปเบปเบ”

เบ›เบฑเบšเปƒเบซเป‰เป€เปเบฒเบฐเบชเบปเบก:
$(MAKE) เป‚เบ›เบฃเปเบเบฃเบก CFLAGS=-O2

เบ”เบตเบšเบฑเบ:
$(MAKE) เป‚เบ›เบฃเปเบเบฃเบก CFLAGS=-g

เป‚เบ„เบ‡เบเบฒเบ™: ao bo
$(CC) $(CFLAGS) $^ -o $@

%.o : %.c
$(CC) $(CFLAGS) -c $< -o $@

เบ–เป‰เบฒเบœเบนเป‰เปƒเบŠเป‰เบžเบดเบก "เป€เบฎเบฑเบ”เบเบฒเบ™เบ”เบตเบšเบฑเบ", เบกเบฑเบ™เบˆเบฐเบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เป‚เบซเบกเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบเบฒเบ™เป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เบ”เบตเบšเบฑเบ
เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบกเบตเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš.

เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบ”เบตเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบกเบฑเบ™เปเบกเปˆเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบชเบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบกเบตเบชเบญเบ‡เบŠเบธเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™
เป„เบŸเบฅเปŒเบงเบฑเบ”เบ–เบธ, เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

CFLAGS := -O2
DEBUG_FLAGS := -g
เป‚เบกเบ”เบนเบ™ := ab

เป‚เบ›เบฃเปเบเบฃเบก: $(MODULES).o
$(CC) $(CFLAGS) $(inputs) -o $(output)

debug/program: debug/$(MODULES).o
$(CC) $(DEBUG_FLAGS) $(inputs) -o $(output)

%.o : %.c
$(CC) $(CFLAGS) -c $(input) -o $(output)

debug/%.o : %.c
$(CC) $(DEBUG_FLAGS) -c $(input) -o $(output)

$(เบ”เบตเบšเบฑเบ phony): debug/เป‚เบ„เบ‡เบเบฒเบ™

เบ›เบฐเป‚เบซเบเบ”เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบกเบฑเบ™เบ”เป‰เบงเบเบงเบดเบ—เบตเบ™เบตเป‰เปเบกเปˆเบ™ (a) เบ—เปˆเบฒเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เปƒเบซเบกเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™
เบ›เปˆเบฝเบ™เบˆเบฒเบ debug เป„เบ›เบซเบฒ optimized เปเบฅเบฐเบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡; (เบ‚)

เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™เบเบงเปˆเบฒเป‚เบ”เบเปƒเบŠเป‰ repositories. เบ•เปเปˆเป„เบ›เบ™เบตเป‰
makefile เปเบกเปˆเบ™เปเบ—เป‰เบ—เบฝเบšเป€เบ—เบปเปˆเบฒ:

repository debug=. # เป€เบฎเบฑเบ”เปƒเบซเป‰เป„เบ”เป€เบฃเบฑเบเบ—เปเบฃเบตเบเปˆเบญเบเบ”เบตเบšเบฑเบเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเป€เบ›เบฑเบ™เบชเบณเป€เบ™เบปเบฒเบ‚เบญเบ‡
# เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™.
load_makefile debug CFLAGS=-g
# เบฅเบปเบšเบฅเป‰เบฒเบ‡ CFLAGS เป€เบกเบทเปˆเบญเบ–เบทเบเป€เบญเบตเป‰เบ™เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฃเบฑเบเบ—เปเบฃเบตเบเปˆเบญเบเบ”เบตเบšเบฑเบ
CFLAGS := -O2 # เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡ CFLAGS เป€เบกเบทเปˆเบญเบ–เบทเบเป€เบญเบตเป‰เบ™เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบเบ™เบตเป‰

เป‚เบ„เบ‡เบเบฒเบ™: ao bo
$(CC) $(CFLAGS) $^ -o $@

%.o : %.c
$(CC) $(CFLAGS) -c $< -o $@

$(เบ”เบตเบšเบฑเบ phony): debug/เป‚เบ„เบ‡เบเบฒเบ™
# เบ–เป‰เบฒเบœเบนเป‰เปƒเบŠเป‰เบžเบดเบก "makepp debug", เบเปเปˆเบชเป‰เบฒเบ‡
# debug/program เปเบ—เบ™เป‚เบ„เบ‡เบเบฒเบ™.

Miscellaneous เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ
เบงเบดเบ—เบตเบเบฒเบ™ do I เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡ เบซเบ™เบถเปˆเบ‡ เบชเปˆเบงเบ™ เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ เบžเบฝเบ‡เปเบ•เปˆ เบ„เบฑเป‰เบ‡เบ”เบฝเบง?

Makepp เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เป€เบžเบฒเบฐเบงเปˆเบฒเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™เบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบšเบเบปเบ”เบฅเบฐเบšเบฝเบš.
เปเบ•เปˆเบกเบตเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เบ™เบตเป‰, เป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เป‚เบกเบ”เบนเบ™เบเบฑเบš
เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบเบฒเบ™โ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เบขเปˆเบฒเบ‡โ€‹เบฎเบธเบ™โ€‹เปเบฎเบ‡โ€‹. เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบšเบฑเบ™โ€‹เบฅเบธโ€‹เป„เบ”เป‰โ€‹เปƒเบ™โ€‹เบชเบญเบ‡โ€‹เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบ„เบฑเป‰เบ‡โ€‹เบ—เปเบฒโ€‹เบญเบดเบ”โ€‹
เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบปเบเป€เบงเบฑเป‰เบ™เบกเบฑเบ™เบˆเบฒเบเป„เบฅเบเบฐเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡:

makepp DEBUG=3 buggy.o # เบชเป‰เบฒเบ‡เบกเบฑเบ™เบ”เป‰เบงเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบญเบทเปˆเบ™.
makepp --dont-build=buggy.o buggy # เปƒเบŠเป‰เบกเบฑเบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ "เบœเบดเบ”" เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡.

เบงเบดเบ—เบตเบเบฒเบ™ do I เป€เบฎเบฑเบ”เปƒเบซเป‰ เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒ my output เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต เบกเบตเบขเบนเปˆ?

เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เบเบปเบ”โ€‹เบฅเบฐโ€‹เบšเบฝเบšโ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบฅเบฒเบโ€‹เบเบฒเบ™โ€‹เบœเบปเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹เป„เบ”เป‰โ€‹, เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เปเบ™เปˆโ€‹เปƒเบˆเบงเปˆโ€‹เบฒโ€‹เปเบ•เปˆโ€‹เบฅเบฐโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบ—เบตเปˆโ€‹
เป„เบ›เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบœเบปเบ™เบœเบฐเบฅเบดเบ”เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบกเบฑเบ™. เปเบ•เปˆเบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบกเบฑเบ™เบ‡เปˆเบฒเบเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™:
เบ™เบตเป‰:

# เบงเบดเบ—เบตเบ„เบฅเบฒเบชเบชเบดเบ
dummy := $(เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบเบฐ -d $(OUTPUT_DIRECTORY) || mkdir -p $(OUTPUT_DIRECTORY))
# เบ™เบตเป‰เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเปเบกเปˆเบ™เบ‡เปˆเบฒเบเบเบงเปˆเบฒเบเบฒเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบถเป‰เบ™เบเบฑเบš
# $(OUTPUT_DIRECTORY) เปเบฅเบฐเบกเบตเบเบปเบ”เบฅเบฐเบšเบฝเบšเป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™.
# เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เปƒเบŠเป‰ := เปเบ—เบ™ = เป€เบžเบทเปˆเบญเบšเบฑเบ‡เบ„เบฑเบšเบกเบฑเบ™
# เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบฑเบ™เบ—เบต.
# เบงเบดเบ—เบตเบเบฒเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบ: เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบฅเบฐเบซเบฑเบ” Perl, OUTPUT_DIRECTORY local var
perl_begin
-d $OUTPUT_DIRECTORY เบซเบผเบท mkdir $OUTPUT_DIRECTORY;
perl_end
# เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบก, เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบชเปเบฒเบฅเบฑเบšเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบกเบตเบขเบนเปˆ
&mkdir -p $(OUTPUT_DIRECTORY)

เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ„เบงเบ™เบˆเบฐเบขเบนเปˆเปƒเบเป‰เบเบฑเบšเบ”เป‰เบฒเบ™เป€เบ—เบดเบ‡เบ‚เบญเบ‡ makefile เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเบกเบฑเบ™เบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”
เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบกเบตเบชเบดเปˆเบ‡เปƒเบ”เปเบ”เปˆเบ—เบตเปˆเบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต.

เบงเบดเบ—เบตเบเบฒเบ™ do I เบœเบปเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰ a เบ„เปเบฒเบชเบฑเปˆเบ‡ to เบ›เบฐเบ•เบดเบšเบฑเบ” on เบ—เบธเบ เบชเป‰เบฒเบ‡?

เบงเบดเบ—เบตเบ—เบตเปˆเบ‡เปˆเบฒเบเบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™เบšเปเปˆเปƒเบŠเป‰เบเบปเบ™เป„เบเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ—เบฑเบ‡เบซเบกเบปเบ”, เปเบ•เปˆเบžเบฝเบ‡เปเบ•เปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฑเบ™, เป€เบŠเบฑเปˆเบ™:
เบ™เบตเป‰:

dummy := $(เบงเบฑเบ™เบ—เบตเปเบเบฐ > last_build_timestamp)

เบซเบผเบทเป€เบญเบปเบฒเปƒเบชเปˆเปƒเบ™เบšเบฅเบฑเบญเบ perl, เปเบšเบšเบ™เบตเป‰:

perl_begin
system("เบชเบฑเปˆเบ‡โ€‹เปƒเบซเป‰โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”");
perl_end

เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบกเบตเบ‚เปเป‰เป€เบชเบเบ—เบตเปˆเบกเบฑเบ™เบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเบšเปเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡
เบเปเบฒเบฅเบฑเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™.

เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบ›เบฐเบเบฒเบ”เป„เบŸเบฅเปŒเป€เบ›เบฑเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ phony, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบŸเบฅเปŒเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡.
เบ™เบตเป‰เบˆเบฐเบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰ makepp เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เปƒเบซเบกเปˆเป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบกเบฑเบ™เบ—เบธเบเบ„เบฑเป‰เบ‡, เปเบ•เปˆเบงเปˆเบฒเบžเบฝเบ‡เปเบ•เปˆเบ–เป‰เบฒเบกเบฑเบ™
เบ›เบฒเบเบปเบ”เบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบšเบฒเบ‡เบขเปˆเบฒเบ‡.

เบงเบดเบ—เบตเบเบฒเบ™ do I เบชเบฑเป‰เบ™ เป„เบ”เป‰ เบชเบฐเปเบ”เบ‡ เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡ เบ„เปเบฒเบชเบฑเปˆเบ‡?

เบกเบฑเบเบˆเบฐเบกเบตเบซเบผเบฒเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™
เปœเป‰เบฒเบˆเปเบšเปเปˆเบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป„เบ”เป‰. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เป‚เบ”เบเบเบฒเบ™เบชเบฐเบเบฑเบ”เบเบฑเป‰เบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบ‚เบญเบ‡
เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบดเบกเบญเบญเบเบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เบชเปˆเบงเบ™เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡. เบกเบฑเบ™
เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเบžเบดเบกเบญเบญเบเบžเบฝเบ‡เปเบ•เปˆเบชเปˆเบงเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เป‚เบ”เบเปƒเบŠเป‰ "$(filter_out )", เป€เบŠเบฑเปˆเบ™:
เบ™เบตเป‰:

ALL_CFLAGS = $(CFLAGS) $(INCLUDES) $(ADDL_CXX_FLAGS) $(DEBUG_FLAGS)

%.o : %.c
@&echo $(notdir $(CC)) ... \
$(filter_out -I* $(ADDL_CXX_FLAGS), $(ALL_CFLAGS)) \
-c $(เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™)
@$(CC) $(ALL_CFLAGS) -c $(input) -o $(output)

("@" เบขเบนเปˆเบ—เบฒเบ‡เบซเบ™เป‰เบฒเบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบชเบฐเบเบฑเบ”เบเบฑเป‰เบ™เบเบฒเบ™เบžเบดเบกเบญเบญเบเบ„เปเบฒเบชเบฑเปˆเบ‡.)

เบ™เบตเป‰เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบซเบฑเบ™เบ•เบปเบงเป€เบฅเบทเบญเบเบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”เปเบ•เปˆเบˆเบฐเบšเปเปˆเบชเบฐเปเบ”เบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”
เบ›เบฐโ€‹เบเบญเบšโ€‹เบกเบตโ€‹เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบฅเบฒเบโ€‹เบเบฒเบ™ (เบŠเบถเปˆเบ‡โ€‹เปƒเบ™โ€‹เบ™เบฑเป‰เบ™โ€‹เบกเบฑเบโ€‹เบˆเบฐโ€‹เบกเบตโ€‹เบซเบผเบฒเบโ€‹เบซเบผเบฒเบโ€‹!). เบ–เป‰เบฒเบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบปเบ™เปƒเบˆ
in เปเบกเปˆเบ™เบ•เบดเบ”เบ•เปเปˆเบเบฑเบ™เปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™ "เบžเบดเบก" (เป€เบŠเบดเปˆเบ‡เป€เบžเบตเปˆเบก a
เปเบ–เบงเปƒเปเปˆ, เบชเบฐเบ™เบฑเป‰เบ™เป€เบˆเบปเป‰เบฒเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบผเบฒเบเบญเบฑเบ™):

เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบ:
@... $(เบžเบดเบกเปœเป‰เบฒเบชเบปเบ™เปƒเบˆ)...

เบงเบดเบ—เบตเบเบฒเบ™ do I เปเบ›เบ‡ a เป€เบญเบเบฐเบชเบฒเบ™ เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช?

เบชเปเบฒเบฅเบฑเบšเบšเบฒเบ‡เบฎเบนเบšเปเบšเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™, เบกเบฑเบ™เบšเปเปˆเบ„เบธเป‰เบกเบ„เปˆเบฒเบ—เบตเปˆเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ„เบทเปˆเบญเบ‡เบชเบฐเปเบเบ™. เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบซเบ™เบถเปˆเบ‡
เบžเบงเบเป€เบฎเบปเบฒเบกเบตเป„เบŸเบฅเปŒ xml, เป€เบงเบปเป‰เบฒ foobar.xml เป€เบŠเบดเปˆเบ‡เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช foobar.out:


เบ
เบ‚
เบ„


เบžเบงเบเป€เบฎเบปเบฒเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ™เบตเป‰, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบงเบดเป€เบ„เบฒเบฐ xml. เบเบฑเบš
buildin & sed, เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบ”เป‰เบงเบเบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบชเบฒเบกเบขเปˆเบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบชเบฒเบกเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡
เบชเบฒเบ:

%.d: %.xml
&sed's! !$(stem).เบญเบญเบ: \\! || เบช! (.+) !$$1 \\! || เบช! !# เบซเบงเปˆเบฒเบ‡!' \
$(input) -o $(output)

เบฅเบงเบก foobar.d

เบžเบฐเบเบฒเบเบฒเบกเบฅเบงเบกเป€เบญเบปเบฒเบญเบฑเบ™เบ™เบตเป‰, เบœเบฐเบฅเบดเบ” "foobar.d" เบ—เปเบฒเบญเบดเบ”:

foobar.out: \
เป€เบ›เบฑเบ™ \
b \
เบ„ \
# เบซเบงเปˆเบฒเบ‡

เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ (เบžเบฝเบ‡เปเบ•เปˆเบ„เปเบฒเบ„เบดเบ”เป€เบซเบฑเบ™เบซเบผเบทเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒเปเบ—เป‰เป†) เบซเบผเบตเบเบฅเป‰เบฝเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบเบฑเบ‡เบงเบปเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก
backslash. เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบซเบผเบฒเบเปเบ–เบงเปเบกเปˆเบ™:

%.d: %.xml
&sed's! !$(stem).เบญเบญเบ: \$$((! ||s! !))! || s!<.+?>!!g' \
$(input) -o $(output)

เบฅเบงเบก foobar.d

เบ™เบตเป‰เบœเบฐเบฅเบดเบ”เบ—เบฝเบšเป€เบ—เบปเปˆเบฒ:

foobar.out: $((
a
b
c
))

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเบเบฒเบ™เบ‚เบฝเบ™เบ„เบทเบ™เปƒเบซเบกเปˆเบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบ, เปƒเบซเป‰เบเปเบฒเบ™เบปเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเบžเบฒเบเปƒเบ™ makefile เบซเบผเบทเปƒเบ™ a
เป‚เบกเบ”เบนเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ›เบฐเบเบญเบšเบกเบต. เป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เบšเปเปˆเบเบณเบ™เบปเบ” $_ เบˆเบฐเบ‚เป‰เบฒเบกเบชเบฒเบเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™:

sub myfilter {
เบเบฑเบšเบ„เบทเบ™ undef $_ เบ–เป‰เบฒ /
$stem เบ‚เบญเบ‡เบ‚เป‰เบญเบ = f_stem;
เบช! !$stem.out: \$((!||s! !))! || s!<.+?>!!g;
}

%.d: %.xml
&sed's! !$(stem).เบญเบญเบ: \$$((! ||s! !))! || s!<.+?>!!g' \
$(input) -o $(output)

เบฅเบงเบก foobar.d

เปƒเบŠเป‰ makepp_cookbook เบญเบญเบ™เบฅเบฒเบเป‚เบ”เบเปƒเบŠเป‰เบšเปเบฅเบดเบเบฒเบ™ onworks.net


เป€เบŠเบตเบšเป€เบงเบต เปเบฅเบฐเบชเบฐเบ–เบฒเบ™เบตเป€เบฎเบฑเบ”เบงเบฝเบเบŸเบฃเบต

เบ”เบฒเบงเป‚เบซเบผเบ”เปเบญเบฑเบš Windows เปเบฅเบฐ Linux

  • 1
    CMU Sphinx
    CMU Sphinx
    CMUSphinx เป€เบ›เบฑเบ™เบฅเปเบฒเป‚เบžเบ‡เป€เบญเบเบฐเบฅเบฒเบ”เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ
    เบเบฒเบ™เบฎเบฑเบšเบฎเบนเป‰เบชเบฝเบ‡เป€เบงเบปเป‰เบฒเบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเบš
    เบ›เปˆเบญเบเบญเบญเบเบกเบฒเบžเบฒเบเปƒเบ•เป‰เปƒเบšเบญเบฐเบ™เบธเบเบฒเบ”เปเบšเบš BSD. เบกเบฑเบ™โ€‹เปเบกเปˆเบ™
    เบเบฑเบ‡เป€เบ›เบฑเบ™เบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบทเปเบซเบผเปˆเบ‡เป€เบ›เบตเบ” ...
    เบ”เบฒเบงเป‚เบซเบฅเบ” CMU Sphinx
  • 2
    PyScripter
    PyScripter
    PyScripter เป€เบ›เบฑเบ™ Python เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”
    เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบšเบšเบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™ (IDE)
    เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบ”เป‰เบงเบเบ„เบงเบฒเบกเบ—เบฐเป€เบเบตเบ—เบฐเบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™
    เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš
    เบเบฒเบ™โ€‹เบ„เป‰เบฒโ€‹เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒ ...
    เบ”เบฒเบงเป‚เบซเบฅเบ” PyScripter
  • 3
    เป€เบเบปเปˆเบฒ Feren OS Repositories
    เป€เบเบปเปˆเบฒ Feren OS Repositories
    เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบš
    Feren OS. เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบญเบฑเบ™เบซเบผเป‰เบฒเบชเบธเบ”, เปƒเบซเป‰เปเบฅเปˆเบ™
    เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบตเป‰: (16.04-based) echo
    "เป€เบ”เบš...
    เบ”เบฒเบงเป‚เบซเบฅเบ” Old Feren OS Repositories
  • 4
    OmegaT - multiplatform CAT tool
    OmegaT - multiplatform CAT tool
    OmegaT เป€เบ›เบฑเบ™เปเบซเบผเปˆเบ‡เบŸเบฃเบต เปเบฅเบฐเป€เบ›เบตเบ”
    Multiplatform Computer Assisted
    เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เบเบฒเบ™โ€‹เปเบ›โ€‹เบžเบฒโ€‹เบชเบฒโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบˆเบฑเบšโ€‹เบ„เบนเปˆ fuzzyโ€‹,
    เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบเบฒเบ™เปเบ›เบžเบฒเบชเบฒ, เบŠเบญเบเบซเบฒเบ„เปเบฒเบชเปเบฒเบ„เบฑเบ™,
    เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ›เบฐโ€‹เบ”เบฒโ€‹, เปเบฅเบฐ tran ...
    เบ”เบฒเบงเป‚เบซเบฅเบ” OmegaT - multiplatform CAT tool
  • 5
    butt (เบญเบญเบเบญเบฒเบเบฒเบ”เป‚เบ”เบเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ™เบตเป‰)
    butt (เบญเบญเบเบญเบฒเบเบฒเบ”เป‚เบ”เบเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ™เบตเป‰)
    butt (เบญเบญเบเบญเบฒเบเบฒเบ”เป‚เบ”เบเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ™เบตเป‰) เป€เบ›เบฑเบ™
    เบ‡เปˆเบฒเบโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹, เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เบ™โ€‹เป‰โ€‹เปโ€‹เบฒ OS เบซเบผเบฒเบโ€‹. เบกเบฑเบ™
    เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ ShoutCast เปเบฅเบฐ IceCast เปเบฅเบฐเปเบฅเปˆเบ™
    เปƒเบ™ Linux, MacOS เปเบฅเบฐ Windows. เบ•เบปเป‰เบ™โ€‹เบ•เป pu...
    เบ”เบฒเบงเป‚เบซเบฅเบ” butt (เบญเบญเบเบญเบฒเบเบฒเบ”เป‚เบ”เบเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ™เบตเป‰)
  • 6
    JavaVi - vi/vim เบšเบฑเบ™เบ™เบฒเบ—เบดเบเบฒเบ™ clone
    JavaVi - vi/vim เบšเบฑเบ™เบ™เบฒเบ—เบดเบเบฒเบ™ clone
    jVi เปเบกเปˆเบ™ clone เบšเบฑเบ™เบ™เบฒเบ—เบดเบเบฒเบ™ vi/vim เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™
    เป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ” javax.swing.text.
    เบกเบตเปƒเบซเป‰เบชเปเบฒเบฅเบฑเบš NetBeans เปเบฅเบฐ JBuilder. jVi
    เป„เบ”เป‰เบ–เบทเบเบญเบญเบเปเบšเบšเป€เบžเบทเปˆเบญเป„เบงเปเบฅเบฐเบ‡เปˆเบฒเบเบ”เบฒเบ
    เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™ ...
    เบ”เบฒเบงเป‚เบซเบฅเบ” JavaVi - vi/vim editor clone
  • เป€เบžเบตเปˆเบกเป€เบ•เบตเบก ยป

Linux เบ„เบณ เบชเบฑเปˆเบ‡

  • 1
    4ti2-genmodel
    4ti2-genmodel
    4ti2 - เบŠเบธเบ”เบŠเบญเบšเปเบงเบชเปเบฒเบฅเบฑเบš algebraic,
    เบšเบฑเบ™เบซเบฒเป€เบฅเบ‚เบฒเบ„เบฐเบ™เบดเบ” เปเบฅเบฐ combinatorial เบเปˆเบฝเบงเบเบฑเบš
    เบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡...
    เปเบฅเปˆเบ™ 4ti2-genmodel
  • 2
    4ti2-gensymm
    4ti2-gensymm
    4ti2 - เบŠเบธเบ”เบŠเบญเบšเปเบงเบชเปเบฒเบฅเบฑเบš algebraic,
    เบšเบฑเบ™เบซเบฒเป€เบฅเบ‚เบฒเบ„เบฐเบ™เบดเบ” เปเบฅเบฐ combinatorial เบเปˆเบฝเบงเบเบฑเบš
    เบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡...
    เปเบฅเปˆเบ™ 4ti2-gensymm
  • 3
    เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบฑเบ”เบ‚เป‰เบญเบ‡
    เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบฑเบ”เบ‚เป‰เบญเบ‡
    crashlistout - เบšเบญเบเป„เบŸเบฅเปŒเป€เบกเบฅ
    เบฅเปเบ–เป‰เบฒเบ—เบตเปˆเบˆเบฐเบญเบญเบเป„เบ›เปƒเบ™เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰
    เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต. ...
    เบ”เปเบฒเป€เบ™เบตเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบเบฒเบ™เบ‚เบฑเบ”เบ‚เป‰เบญเบ‡
  • 4
    crashmail
    crashmail
    crashmail - A Fidonet *.JAM เปเบฅเบฐ MSG
    เป‚เบเบ™...
    เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ crashmail
  • 5
    g.gui.iclassgrass
    g.gui.iclassgrass
    g.gui.iclass - เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบšเบดเปˆเบ‡เปเบเบ‡
    เบเบฒเบ™เบˆเบฑเบ”เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบฎเบนเบšเบžเบฒเบš.
    เบชเป‰เบฒเบ‡เบฅเบฒเบเป€เบŠเบฑเบ™ spectral เบชเปเบฒเบฅเบฑเบš an
    เบฎเบนเบšโ€‹เบžเบฒเบšโ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹เปƒเบซเป‰โ€‹เบœเบนเป‰โ€‹เปƒเบŠเป‰โ€‹เป€เบžเบทเปˆเบญโ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹
    เบ‚เบปเบ‡โ€‹เป€เบ‚เบ”โ€‹เบ—เบตเปˆโ€‹เบชเบปเบ™โ€‹เปƒเบˆ...
    เปเบฅเปˆเบ™ g.gui.iclassgrass
  • 6
    g.gui.mapswipegrass
    g.gui.mapswipegrass
    g.gui.mapswipe - เบ›เบฝเบšเบ—เบฝเบšเปเบšเบšเป‚เบ•เป‰เบ•เบญเบš
    เบชเบญเบ‡เปเบœเบ™เบ—เบตเปˆเป‚เบ”เบเบเบฒเบ™เบ›เบฑเบ”เปเบ–เบšเบเบฒเบ™เป€เบšเบดเปˆเบ‡เป€เบซเบฑเบ™.
    เบ„เปเบฒเบชเปเบฒเบ„เบฑเบ™: เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, GUI, เบเบฒเบ™เบชเบฐเปเบ”เบ‡ ...
    เปเบฅเปˆเบ™ g.gui.mapswipegrass
  • เป€เบžเบตเปˆเบกเป€เบ•เบตเบก ยป

Ad