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

Ad


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

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

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

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

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

์ด๋ฆ„


makepp_incompatibilities -- makepp์™€ GNU make ๊ฐ„์˜ ๋น„ํ˜ธํ™˜์„ฑ

๊ธฐ์ˆ 


Makepp์€ ๊ฐ€๋Šฅํ•œ ํ•œ GNU make์— ๊ฐ€๊น๊ฒŒ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
(<http://www.gnu.org/software/make/manual/make.html>). GNU ์ž๋™ ๋„๊ตฌ
(<http://www.gnu.org/software/automake/manual/automake.html>), CMake
(<http://www.cmake.org/>), ํ”„๋ฆฌ๋ฉ”์ดํฌ(http://industriousone.com/premake> ๊ทธ๋ฆฌ๊ณ  ์ฐธ๊ณ ์‚ฌํ•ญ์„ ์ฐธ์กฐํ•˜์„ธ์š”
์•„๋ž˜) ๋˜๋Š” ์ง์ ‘ ์ œ์ž‘ํ•œ ๋ ˆ๊ฑฐ์‹œ ๋นŒ๋“œ ์‹œ์Šคํ…œ์€ makepp๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค
ํ”„๋กœ์ ํŠธ๋ฅผ ์‰ฝ๊ฒŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ๋ชจ๋“  ๊ฒƒ์„ ์ฆ๊ธฐ๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด
makepp์˜ ์žฅ์ (์˜ˆ: ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์—ฌ์ „ํžˆ GNU make๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Œ)
๊ท€ํ•˜์˜ ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ์‹ ๋ขฐ์„ฑ ์ด์ ์„ ํ™œ์šฉํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋Ÿฌ๋‚˜ ์ฒ ํ•™์˜ ์ฐจ์ด๋กœ ์ธํ•ด GNU make๋‚˜ POSIX make ์ค‘ ์ผ๋ถ€๋Š”
(<http://pubs.opengroup.org/onlinepubs/009695399/utilities/make.html>) ๊ธฐ๋Šฅ์€ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค
์ง€์›๋ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์—†์–ด์„œ ์ผ๋ถ€๋Š” ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜
GNU make์™€์˜ ์ฐจ์ด์ ์€ ์ƒ๋‹นํžˆ ๊ธฐ์ˆ ์ ์ด๋ฉฐ ๊ฑฐ์˜ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„์•„
๊ธฐ์กด ์ œํ’ˆ์˜ ๋‹จ์ ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์ ์  ๋” ๋ณต์žกํ•ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  makepp์—๊ฒŒ ์–ด๋ ค์›€์„ ์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ตฌ์ถ•๋˜์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ์„ ์‹œ๋„ํ•ด ๋ณด์‹ญ์‹œ์˜ค.

makepp --๊ฒฝ๊ณ  ์—†์Œ makepp_simple_concatenation=1 makepp_percent_subdirs=1 \
--build-check=target_newer --last-chance-rules --no-remake-makefiles

์„ฑ๊ณตํ•˜๋ฉด ํ•ด๋‹น ์ธ์ˆ˜๋ฅผ ํ•˜๋‚˜์”ฉ ์ œ๊ฑฐํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๊ฒŒ ์‹คํŒจํ•œ๋‹ค๋ฉด,
๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ด ๋ณด์„ธ์š”.

--์ „ํ†ต์ -์žฌ๊ท€์ -๋งŒ๋“ค๊ธฐ

์ด๊ฒƒ๋„ ์‹คํŒจํ•˜๋ฉด makepp๊ณผ ํ˜‘๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์•ฝ๊ฐ„ ์กฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹ฌ์ง€์–ด
์—ฌ๊ธฐ์— ์„ค๋ช…๋œ ์ผ๋ถ€ ์˜ต์…˜์œผ๋กœ ์ธํ•ด ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค๋ฉด ์—ฌ์ „ํžˆ ์ ์‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‘ ์ œํ’ˆ ๋ชจ๋‘์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

๊ฐ•์ œ ๋ฐฐ์šฐ๊ธฐ POSIX or GNU ํ™•์ธ ํ˜ธํ™˜์„ฑ


๋‹ค์Œ์€ ๋งŽ์€ ๋ ˆ๊ฑฐ์‹œ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์ž‘๋™์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋ช…๋ น์ค„ ๊ฐ€๋Šฅ์„ฑ์ž…๋‹ˆ๋‹ค.
์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ . ์ด๋Š” makepp๊ฐ€ GNU make์˜ ๋™์ž‘์„ ์ •ํ™•ํ•˜๊ฒŒ ์—๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

ํ˜ธํ™˜์„ฑ ๋ฅผ ํ†ตํ•ด ์ „์—, ์˜ต์…˜ : "--build-check=target_newer"
๊ธฐ๋ณธ์ ์œผ๋กœ makepp๋Š” ์ข…์†์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  ๋Œ€์ƒ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
๋งˆ์ง€๋ง‰ ๋นŒ๋“œ ์ดํ›„ ๋ณ€๊ฒฝ๋˜์—ˆ๊ฑฐ๋‚˜ ๋ช…๋ น์ด ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ(makepp_build_check ์ฐธ์กฐ)
์„ธ๋ถ€). ์ด๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹น์‹ ์ด ์›ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋•Œ๋กœ๋Š” ๋ชฉํ‘œ๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
makepp์˜ ์ œ์–ด์™€ ๋ณ„๊ฐœ๋กœ ์ˆ˜์ •๋œ ๊ฒฝ์šฐ(์˜ˆ: ํŽธ์ง‘์„ ํ†ตํ•ด ๋‹ค์‹œ ๋นŒ๋“œ๋จ)
๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜๋™์œผ๋กœ ์‹คํ–‰ํ•˜์—ฌ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค). makepp๊ฐ€ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ์กด make ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋Œ€์ƒ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์ตœ์‹  ๋ฒ„์ „์ธ ๊ฒฝ์šฐ์—๋งŒ ๋‹ค์‹œ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.
์ด ์˜ต์…˜์„ ๋ช…๋ น์ค„์— ์ถ”๊ฐ€ํ•˜์—ฌ ์ข…์†์„ฑ์„ ํ™•์ธํ•˜์„ธ์š”.

ํ˜ธํ™˜์„ฑ ๋ฅผ ํ†ตํ•ด ์ „์—, ์˜ต์…˜ : "--dont-build=config.status"
์ž๋™ ๊ตฌ์„ฑ์„ ์‹œ๋„ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํŒจํ‚ค์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ๊ณผ ๊ฐ™์ด ์š”์ฒญ๋ฐ›์ง€ ์•Š๋Š” ํ•œ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

config.status : ๊ตฌ์„ฑ
./config.status --์žฌํ™•์ธ

๊ตฌ์„ฑ : aclocal.m4์—์„œ ๊ตฌ์„ฑ
์ž๋™ ๊ตฌ์„ฑ

๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ "autoconf"๋„ ์„ค์น˜ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๋ชจ๋“  ์ž‘์—…์„ ์„ฑ์‹คํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
makepp๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ทœ์น™์€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ง“์ง€ ๋ง๋ผ๊ณ .

ํ˜ธํ™˜์„ฑ ๋ฅผ ํ†ตํ•ด ์ „์—, ์˜ต์…˜ : "--๋งˆ์ง€๋ง‰ ๊ธฐํšŒ ๊ทœ์น™"
๊ธฐ๋ณธ ๊ทœ์น™(ํŒจํ„ด ์ข…์†์„ฑ์ด ์—†๋Š” ํŒจํ„ด ๊ทœ์น™)์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
Makepp์€ ๊ธฐ์กด ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ชจ๋“  ๊ทœ์น™์„ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๋ฏ€๋กœ ๋ชจ๋“  ๊ทœ์น™์„ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค.
์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์•„์•„ ์ด๋Ÿฐ ์‹์œผ๋กœ ํŒจํ„ด์„ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.
ํŒจํ„ด ์ข…์†์„ฑ์ด ์—†๋Š” ๊ทœ์น™์ž…๋‹ˆ๋‹ค. :last_chance ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์ด๋ฅผ ๋ถ€๋ถ„์ ์œผ๋กœ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด ๋ ˆ๊ฑฐ์‹œ makefile์— ์ถฉ๋ถ„ํ•  ๊ฒฝ์šฐ ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ „์—ญ์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜ธํ™˜์„ฑ ๋ฅผ ํ†ตํ•ด ์ „์—, ์˜ต์…˜ : "--๊ฒฝ๊ณ  ์—†์Œ"
์ด๊ฒƒ์€ ๊ฒฐ๊ณผ๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Makepp์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
์ „ํ†ต์ ์ธ ์œ ๋‹‰์Šค๋Š” ์ด๋ฅผ ์›€์ธ ๋ฆฌ์ง€ ์•Š๊ณ  ๋ฐ›์•„๋“ค์ธ๋‹ค. ์ด๋Ÿฐ ๊ฒƒ๋“ค์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค
makepp๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ๊ณ ๊ฐ€ ๊ท€์ฐฎ๋‹ค๋ฉด ๋Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
์ด ์˜ต์…˜์œผ๋กœ.

ํ˜ธํ™˜์„ฑ ๋ฅผ ํ†ตํ•ด ์ „์—, ์˜ต์…˜ : "--ํ•˜์ด๋ธŒ๋ฆฌ๋“œ-์žฌ๊ท€-๋งŒ๋“ค๊ธฐ"
make๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์€ ์ข…์ข… ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๊ด€ํ–‰์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค("๋” ๋‚˜์€
์ž์„ธํ•œ ๋‚ด์šฉ์€ makepp์˜ ๊ณ„์ธต์  ๋นŒ๋“œ๋ฅผ ์œ„ํ•œ ์‹œ์Šคํ…œ'์„ ์ฐธ์กฐํ•˜์„ธ์š”. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ๋งค์šฐ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.
๊ธฐ์กด ๋ฉ”์ดํฌํŒŒ์ผ. Makepp์€ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์žฌ๊ท€ make๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ฒƒ์„ ์œ„ํ•ด
makefile์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ "load_makefile" ๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ makepp์˜ ์•”์‹œ์  ๋ช…๋ น๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์ข‹์Šต๋‹ˆ๋‹ค.
makefile ๋กœ๋”ฉ ๋ฉ”์ปค๋‹ˆ์ฆ˜.

๋ณ€ํ˜• ๋นŒ๋“œ์— ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žฌ๊ท€์  ๋นŒ๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด
maker safer ํ˜ธ์ถœ, makepp๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์‹ค์ œ๋กœ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋‹น์‹ ์ด ๊ทธ๋ ‡๊ฒŒ ๋งํ•˜๋”๋ผ๋„. ๋Œ€์‹ , ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๋Š” ์ƒ์œ„ ํ”„๋กœ์„ธ์Šค์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค.
์‹ค์ œ ๋นŒ๋“œ๋Š” ์ƒ์œ„ ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

์ด๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ž‘๋™ํ•˜์ง€๋งŒ ๋™์ผํ•œ ๋ฉ”์ดํฌํŒŒ์ผ์—์„œ ์—ฌ๋Ÿฌ ๋ฉ”์ดํฌํŒŒ์ผ์„ ํ˜ธ์ถœํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋Œ€์ƒ: ์ข…์†์„ฑ
$(MAKE) -f other_makefile ๋Œ€์ƒ

์ด ๊ฒฝ์šฐ makepp๋Š” ๋‘ ๋ฒˆ์งธ makefile์„ ๋กœ๋“œํ•˜๊ณ  ์žˆ์Œ์„ ํ™•์ธํ•˜๊ณ  ๋ถˆํ‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด
๋Œ€์‹ ์— ์ถ”๊ฐ€ ๋ฉ”์ดํฌํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•˜๋Š” ์ „ํ†ต์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๋˜๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.
๊ฐ๊ฐ ๋ณ„๋„์˜ makepp ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฉ”์ดํฌํŒŒ์ผ์„ ๊ธฐ์ˆ ์ ์œผ๋กœ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋™์ผํ•œ ๊ฐ€์งœ ๋Œ€์ƒ ์ด๋ฆ„. ์ด๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค๋Š” ๊ฒƒ์€ makepp์˜ ์™„์ „ํ•œ ์žฌ์„ค๊ณ„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
๋‚ด๋ถ€. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ ๋™์ผํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋Œ€์ƒ: ์ข…์†์„ฑ
cd ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ && $(MAKE) -f other_makefile ๋Œ€์ƒ

ํ˜ธํ™˜์„ฑ ๋ฅผ ํ†ตํ•ด ์ „์—, ์˜ต์…˜ : "--์ „ํ†ต์ ์ธ ์žฌ๊ท€-๋งŒ๋“ค๊ธฐ"
๋•Œ๋กœ๋Š” ์ด์ „ ์˜ต์…˜์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.
๋ชจ์ˆœ๋œ ์˜ต์…˜. Makepp์€ ํ•˜๋‚˜์˜ ์ „์—ญ ์˜ต์…˜ ์„ธํŠธ๋งŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ํ•˜์œ„ make๋Š”
๋‹ค๋ฅธ makefile์—๋„ ์ ์šฉ๋˜๋ฏ€๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์˜ต์…˜์„ ๋ช…๋ น์ค„์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์€ ๋ถ€์ž‘์šฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ยท ์žฌ๊ท€ make๋Š” ๋ถ€๋ชจ๊ฐ€ ์‹คํ–‰ํ•˜๋”๋ผ๋„ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
gmake์™€ ๋‹ฌ๋ฆฌ ํ”„๋กœ์„ธ์Šค ์ˆ˜์— ๋Œ€ํ•œ ์ „๋ฐ˜์ ์ธ ์กฐ์ •์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€
์ด๋Ÿฌํ•œ ์ž‘์—… ๋ฐฉ์‹์€ makepp์˜ ์„ค๊ณ„ ๋ชฉํ‘œ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌํ˜„๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ยท ์žฌ๊ท€ make ํ”„๋กœ์„ธ์Šค๋Š” ์ €์žฅ์†Œ์— ๋Œ€ํ•ด ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

ยท ๊ฐ ์žฌ๊ท€ make ํ”„๋กœ์„ธ์Šค๋Š” ํ˜ธ์ถœ๋œ ๋””๋ ‰ํ† ๋ฆฌ์— ์ž์ฒด ๋กœ๊ทธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
์ „์ฒด ๋นŒ๋“œ์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ๋กœ๊ทธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๋Œ€์‹ .

ยท makepp๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ „ํ†ต์ ์ธ make๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๊ฒƒ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด
๋นŒ๋“œ ์‹œ์Šคํ…œ์€ ๋ชจ๋“  ๋ฐฉํ–ฅ์œผ๋กœ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๋์—†๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์žฌ๊ท€. Makepp์€ 50๋ผ์šด๋“œ ํ›„์— ๋ธŒ๋ ˆ์ดํฌ๋ฅผ ๋‹น๊ธฐ๊ณ  ์ฆ๊ฐ€ ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ฆ‰, ์‹ค์ œ๋กœ ๊ทธ๋ ‡๊ฒŒ ๊นŠ์€ ์ค‘์ฒฉ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

"--traditional-recursive-make" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š”
"MAKEOVERRIDES" ๋ฐ "MFLAGS"๋Š” ์„ค์ •๋˜์ง€ ์•Š๊ณ  ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๊ฑด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

A ํ”„๋ฆฌ๋ฉ”์ดํฌ ์ƒ์„ฑ Makefile ๋™์ผํ•œ ํ•˜์œ„ make ํ˜ธ์ถœ์— ๋Œ€ํ•œ ์žฌ๋ฏธ์žˆ๋Š” ๋ž˜ํผ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.
์˜ˆ๋ฐฐ ๊ทœ์น™์„œ. ํ”„๋กœ์ ํŠธ ๋Œ€์ƒ์ด ์žˆ๋Š” ๊ฒฝ์šฐ XYZ ๊ทธ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ค„์„ ๊ฐ€์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค

@${MAKE} --no-print-directory -C . -f XYZ.make

์ด ๊ฒฝ์šฐ ์ง์ ‘ ํ˜ธ์ถœํ•˜์—ฌ "--traditional-recursive-make" ์˜ต์…˜์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
"-f๋กœ makepp XYZ.make" ์˜ต์…˜์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

ํ˜ธํ™˜์„ฑ ์—†์ด ์ „์—, ์˜ต์…˜ : "--์ž‘์—…=n"
๋ ˆ๊ฑฐ์‹œ makefile์€ ๋•Œ๋•Œ๋กœ ์ˆœ์„œ์— ๋”ฐ๋ผ ๋ชจ๋“  ์ข…์†์„ฑ์„ ๋‚˜์—ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ œ ์‹œ๊ฐ„์— ๋งž์ถฐ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ƒํ™ฉ์—์„œ makepp๋Š” ์ด์ „์— ๊ทœ์น™์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•ด๋‹น ์ข…์†์„ฑ์€ ๋ชจ๋‘ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋” ์ ๊ฒŒ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์•„์˜ˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๊ฒฐ๊ณผ๊ฐ€ ๋” ์ข‹์•„์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ณ‘๋ ฌ ์‹คํ–‰.

ํ˜ธํ™˜์„ฑ ๋ฅผ ํ†ตํ•ด ์ „์—, ๋ณ€ํ•˜๊ธฐ ์‰ฌ์šด: "makepp_simple_concatenation=1"
Rc ์Šคํƒ€์ผ ๋Œ€์ฒด๋Š” makepp๊ฐ€ ํ…์ŠคํŠธ์— ๋Œ€ํ•œ ๋ณ€์ˆ˜ ๋Œ€์ฒด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋ณธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
๋ฌธ์ž์—ด์€ ๋ ˆ๊ฑฐ์‹œ ๋ฉ”์ดํฌํŒŒ์ผ์„ ๊ฑฐ์˜ ๊นจ์ง€์ง€ ์•Š์œผ๋ฉฐ ์ข…์ข… ์ƒˆ๋กœ์šด ๋ฉ”์ดํฌํŒŒ์ผ์— ์œ ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
๋ฉ”์ดํฌํŒŒ์ผ. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ์„ ๋Œ€์ฒดํ•  ๋•Œ ๊ฐ€๋” ๋น„ํ˜ธํ™˜์„ฑ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
๊ณต๋ฐฑ์œผ๋กœ ๋‘˜๋Ÿฌ์‹ธ์—ฌ ์žˆ์ง€ ์•Š์€ ๋ณ€์ˆ˜. ์˜ˆ๋ฅผ ๋“ค์–ด,

INCLUDE_PREFIX := -I/์ผ๋ถ€/ํฌํ•จ/dir -I
ํฌํ•จ := $(INCLUDE_PREFIX)/๊ธฐํƒ€/ํฌํ•จ/๋””๋ ‰ํ„ฐ๋ฆฌ

rc-์ธ ๊ฒฝ์šฐ "INCLUDES"๋ฅผ "-I/some/include/dir/other/include/dir -I/other/include/dir"๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
์Šคํƒ€์ผ ๋Œ€์ฒด๊ฐ€ ํ™œ์„ฑํ™”๋˜๋Š” ๋ฐ˜๋ฉด GNU make๋Š” ์ด๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
"-I/์ผ๋ถ€/ํฌํ•จ/๋””๋ ‰ํ„ฐ๋ฆฌ -I/๊ธฐํƒ€/ํฌํ•จ/๋””๋ ‰ํ„ฐ๋ฆฌ". ์˜ˆ๋ฅผ ๋“ค์–ด Redis 2.6.5๋ฅผ ์ปดํŒŒ์ผํ•  ๋•Œ ๋‹ค์Œ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
"printfgcc"๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”. ๋‘ ๋ช…๋ น์„ ์ด๋ ‡๊ฒŒ ์žฌ๋ฏธ์žˆ๊ฒŒ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ•๋ ฅํ•œ ์ฆ๊ฑฐ์ž…๋‹ˆ๋‹ค.
์ด ๋ณ€์ˆ˜๋Š” ์˜๋ฏธ๋ก ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํด๋ฐฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ณ€์ˆ˜์˜ ๊ณต๋ฐฑ ์ฒ˜๋ฆฌ์—๋„ ๋น„ํ˜ธํ™˜์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋„ :=
T := -o $(null) # T์—๋Š” -o ๋’ค์— ๊ณต๋ฐฑ ํ•˜๋‚˜๊ฐ€ ์˜ต๋‹ˆ๋‹ค.
์•„์›ƒํŒŒ์ผ = $(T)์•„์›ƒํŒŒ์ผ

rc ์Šคํƒ€์ผ ๋Œ€์ฒด๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ "OUTFILE"์„ "-ooutfile"๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐ˜๋ฉด, GNU make
"-o outfile"๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋น„ํ˜ธํ™˜์„ฑ์€ ๋ชจ๋‘ "makepp_simple_concatenation"์„ ์„ค์ •ํ•˜์—ฌ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.
๋ณ€ํ•˜๊ธฐ ์‰ฌ์šด. ๊ทธ๋Ÿฌ๋‚˜ "makepp_simple_concatenation"์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ makepp๋Š” ์—ฌ์ „ํžˆ
์ผ๋ถ€ ์ƒํ™ฉ์—์„œ๋Š” ๊ณต๋ฐฑ์„ ๋น„ํ˜ธํ™˜์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

T := -o # ์ด ์ฃผ์„์„ ์‚ญ์ œํ•˜์ง€ ๋งˆ์„ธ์š”.

GNU make๋Š” "-o" ๋’ค์— ๊ณต๋ฐฑ์„ ํฌํ•จํ•˜๋„๋ก "T"๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ˜๋ฉด makepp๋Š”
์–ด์จŒ๋“  ํ›„ํ–‰ ๊ณต๋ฐฑ. ํ›„ํ–‰ ๊ณต๋ฐฑ์„ ์›ํ•˜๋ฉด ๋‹ค์Œ์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
"makepp_simple_concatenation" ๋ฐ ๋”๋ฏธ ๊ด€๋ จ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ "T" ์„ค์ •
์œ„์— ํ‘œ์‹œ๋œ ๊ฒƒ์ฒ˜๋Ÿผ "null"๊ณผ ๊ฐ™์€ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์„ ํƒ๊ถŒ "--no-remake-makefiles"
์ผ๋ฐ˜์ ์ธ ์˜คํ”ˆ ์†Œ์Šค์—์„œ๋Š” makefile์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด "configure"๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๊ฒƒ๋“ค์€
makefile์—๋Š” ์ผ๋ถ€ ๋ช…๋ น์„ ํ˜ธ์ถœํ•˜์—ฌ makefile์„ ๋‹ค์‹œ ๋งŒ๋“œ๋Š” ๊ทœ์น™์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Makepp์€
๊ธฐ๊บผ์ด ์ค€์ˆ˜ํ•˜๊ณ  ๊ทœ์น™์— ๋”ฐ๋ผ ์—…๋ฐ์ดํŠธํ•˜์„ธ์š”. ํ•˜์ง€๋งŒ ๋•Œ๋กœ๋Š” ์ด๊ฒƒ์ด ํ•ด๋กœ์šธ ๋•Œ๋„ ์žˆ์œผ๋ฏ€๋กœ
๊ทธ๋ƒฅ ๊ฑด๋„ˆ๋›ฐ์„ธ์š”.

ํ˜ธํ™˜์„ฑ ๋ฅผ ํ†ตํ•ด ์ „์—, ๋ณ€ํ•˜๊ธฐ ์‰ฌ์šด: "makepp_percent_subdirs=1"
๊ธฐ๋ณธ์ ์œผ๋กœ ํŒจํ„ด ๊ทœ์น™์˜ "%"๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
์ด:

%.o: %.c
$(CC) $(CFLAGS) -c $(์ž…๋ ฅ) -o $(์ถœ๋ ฅ)

"../shared/xyz.c"์™€ ๊ฐ™์€ ํŒŒ์ผ์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์˜ ํŒŒ์ผ๊ณผ ์ผ์น˜์‹œํ‚ค๋ ค๋ฉด
ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ๋„ ํ™•์ธํ•œ ๋‹ค์Œ ๋ช…๋ น์ค„์—์„œ "makepp_percent_subdirs=1" ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
๋˜๋Š” makefile์˜ ์‹œ์ž‘ ๋ถ€๋ถ„ ๊ทผ์ฒ˜์— ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜ธํ™˜์„ฑ ๋ฅผ ํ†ตํ•ด ์ „์—, ํ™˜๊ฒฝ ๋ณ€ํ•˜๊ธฐ ์‰ฌ์šด: $MAKEPP_IGNORE_OPTS
๋ ˆ๊ฑฐ์‹œ ์žฌ๊ท€ ํ˜ธ์ถœ์ด makepp๊ฐ€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ์˜ต์…˜์„ ์ „๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์˜ต์…˜์ด ์ค‘์š”ํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ผ์ง€๋งŒ, makepp๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ฐฉํ•ดํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์œผ๋กœ
ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ makepp์—๊ฒŒ ํŠน์ • ์˜ต์…˜์„ ์ž๋™์œผ๋กœ ๋ฌด์‹œํ•˜๋„๋ก ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์น˜
๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ์˜ต์…˜ ๋ชฉ๋ก์ด์–ด์•ผ ํ•˜๋ฉฐ 4๊ฐ€์ง€ ๋ณ€ํ˜•์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

--๊ธด=x
์ธ์ˆ˜๊ฐ€ ํ•„์š”ํ•œ ๊ธด ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ์ด ์‚ฌ์‹ค์€ ๋™๋“ฑ์„ ํ†ตํ•ด ์„ ์–ธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์‹ค์ œ ์‚ฌ์šฉ์€ ๊ณต๋ฐฑ("--long=bla" ๋˜๋Š”
"--๊ธด bla".

--๊ธด
์ธ์ˆ˜๊ฐ€ ์—†๋Š” ๊ธด ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

-sx ์ธ์ˆ˜๋ฅผ ๊ธฐ๋Œ€ํ•˜๋Š” ์งง์€ ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ์ด ์‚ฌ์‹ค์€ ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์„ ์–ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์˜ต์…˜ ๋ฐ”๋กœ ๋’ค์— ๋ญ”๊ฐ€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ ์‚ฌ์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ๋ถ„๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ณต๋ฐฑ("-sbla" ๋˜๋Š” "-s bla")

-s ์ธ์ˆ˜๊ฐ€ ์—†๋Š” ์งง์€ ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด makepp์˜ -R ์˜ต์…˜์„ ์ธ์ˆ˜ ์—†์ด XNUMX๋กœ ์žฌ์ •์˜ํ•˜๊ณ  gmake์˜ ๋””๋ฒ„๊ทธ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ์˜ต์…˜:

๋‚ด๋ณด๋‚ด๊ธฐ MAKEPP_IGNORE_OPTS='-R --debug=x'

๋น„ ํ˜ธํ™˜์„ฑ ๊ทธ ํ•„์š” Makefile ๋ณ€๊ฒฝ


ยท make๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” Makefile์€ makepp๊ฐ€ ๋ชจ๋“  ๊ฒƒ์„ ์ž์ฒด์ ์œผ๋กœ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Alas Perl์˜ "ExtUtils::MakeMaker"๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ํ˜•์‹ ์ค‘ ๋‘ ๋ฒˆ์งธ๋ฅผ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค.
์ด ์‹ค์ˆ˜๋Š” ๋ฒ„์ „ 6.56(Perl 5.12.1)๊นŒ์ง€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ:
CD ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ; ๋งŒ๋“ค๋‹ค

MAKE = ๋งŒ๋“ค๋‹ค

ยท "VPATH" ๋ณ€์ˆ˜๋ฅผ ์–ด๋–ค ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์•”์‹œ์ ์œผ๋กœ "vpath % ๊ฐ’"์ด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. "v๊ฒฝ๋กœ"
๋ช…๋ น๋ฌธ์€ ์ €์žฅ์†Œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์—๋ฎฌ๋ ˆ์ด์…˜๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ gmake๊ฐ€ ๋Œ€์ฒด๋˜๋Š” ๊ณณ
vpath์—์„œ ์ฐพ์€ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ makepp๋Š” ๋Œ€์‹  ๊ธฐํ˜ธ์ ์œผ๋กœ ๋งํฌํ•ฉ๋‹ˆ๋‹ค.
ํ•„์š”ํ•œ ๊ณณ. ๋”ฐ๋ผ์„œ makepp๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜์ •๋˜์ง€ ์•Š์€ ๋ฌธ์ž์—ด์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค.

vpath์˜ ๋Œ€์ƒ์€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (Gmake๋Š” ๋‹ค์Œ๋ณด๋‹ค ์ตœ์‹ ์ธ ๊ฒฝ์šฐ ์ด๋ฅผ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.
์ข…์†์„ฑ์ด ์žˆ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋Œ€์ƒ์€ ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋‹ค์‹œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
-- ์˜คํžˆ๋ ค ์ผ๊ด€์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.) vpath ์„ค์ • ํ•ด์ œ๋Š” ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ยท ๋ฉ”์ดํฌํŒŒ์ผ์˜ ๋’ท๋ถ€๋ถ„์— ์žˆ๋Š” ํŒจํ„ด ๊ทœ์น™์€ ์ด์ „์— ์žˆ๋Š” ํŒจํ„ด ๊ทœ์น™์„ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ GNU make์™€ ๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค.

ยท ๋‚ด์žฅ๋œ ์•”์‹œ์  ๊ทœ์น™ ์„ธํŠธ๋Š” GNU make์˜ ๊ทœ์น™๊ณผ ๋‹ค์†Œ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
๋ณ€์ˆ˜ ์ด๋ฆ„์€ ๋Œ€์ฒด๋กœ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
C/C++/Fortran ํ”„๋กœ๊ทธ๋žจ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ปดํŒŒ์ผํ•˜๊ณ  ์‹ค์ œ๋กœ
์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ์ ์ ˆํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Modula-2, RatFor ๋ฐ ๊ธฐํƒ€ ํฌ๊ท€ ์ง€์›
GNU์—์„œ ๊ณ„์† ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ธ์–ด๋Š” ์˜๋„์ ์œผ๋กœ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์‹ค์ˆ˜๋กœ ํ•ด๋‹น ์–ธ์–ด์— ๋Œ€ํ•œ ํ™•์žฅ์„ ์žฌ์‚ฌ์šฉํ–ˆ์„ ๋•Œ make์˜ ๊ทœ์น™์ž…๋‹ˆ๋‹ค.

ยท ์ž‘์—… ์ ‘๋‘์‚ฌ "+"๋Š” ์ž๋™์œผ๋กœ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.

ยท ์•„์นด์ด๋ธŒ ๋ฉค๋ฒ„๋Š” ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ ๊ด€๋ จ ์ž๋™ ๋ณ€์ˆ˜๋„ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
$%, "$(%D)" ๋ฐ "$(%F)".

ยท SCCS ์ง€์›์ด ์—†์Šต๋‹ˆ๋‹ค.

ยท ๋ณ€์ˆ˜ ํ• ๋‹น์˜ ์•ž๋’ค ๊ณต๋ฐฑ์€ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค(
๊ณต๋ฐฑ ๋’ค์— ์ฃผ์„์ด ์˜ต๋‹ˆ๋‹ค). ๊ณต๋ฐฑ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€
๋น„ํ˜ธํ™˜์„ฑ, makepp_variables์˜ "๋ณ€์ˆ˜์˜ ๊ณต๋ฐฑ"์„ ์ฐธ์กฐํ•˜์„ธ์š”.

ยท Makepp์€ "include" ๋ฌธ์— ํฌํ•จ๋œ ํŒŒ์ผ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
makefile์—๋Š” include ๋ฌธ์ด ํ‘œ์‹œ๋˜๊ธฐ ์ „์— makefile์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ทœ์น™์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
(๊ทธ๋Ÿฌ๋‚˜ makefile ์ž์ฒด๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.) ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
ํฌํ•จ ํŒŒ์ผ ์ข…์†์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  makepp์—์„œ๋Š” ์œ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์–ด์จŒ๋“  ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ยท "SHELL" ๋ณ€์ˆ˜๋Š” ํ˜„์žฌ ๋ถ€๋ถ„์ ์œผ๋กœ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. Makepp์€ ํ•ญ์ƒ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. / ๋นˆ / SH
...์„ ์ œ์™ธํ•˜๋ฉด /usr/xpg4/bin/sh or /sbin/xpg4/sh ๋ฐœ๊ฒฌ๋˜์—ˆ๊ฑฐ๋‚˜ "SHELL"์„ ๋‚ด๋ณด๋‚ด์ง€ ์•Š๋Š” ํ•œ
makefile์˜ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ช…๋ น ๊ตฌ๋ฌธ ๋ถ„์„๊ธฐ๊ฐ€ ์™„์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์‰˜ ๋ช…๋ น์˜ ๊ธฐ๋Šฅ์„ ์ดํ•ดํ•˜์‹ญ์‹œ์˜ค. Windows Strawberry ๋˜๋Š” ActiveState Perl์˜ ๊ฒฝ์šฐ
๋Œ€์‹  SHELL ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ „์— makepp์— ์ „ํ™”๋ฅผ ๊ฒ๋‹ˆ๋‹ค.

ยท Makefile์˜ ๋ชจ๋“  ์ข…์†์„ฑ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ž‘๋™ํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถˆํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ปดํŒŒ์ผ ์˜ต์…˜์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๊ฐ•์ œ๋กœ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Makepp์€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค
makefile์— ํŠน๋ณ„ํ•œ ๋‚ด์šฉ ์—†์ด ๋นŒ๋“œ ๋ช…๋ น์ด ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ ๊ทธ๊ฒƒ์€ ์ €์žฅํ•œ๋‹ค
์ด๋Š” ํŒŒ์ผ๋ณ„๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. makefile์„ ๋ณ€๊ฒฝํ•˜๋ฉด makefile์ด ์ •ํ™•ํžˆ ๋ฌด์—‡์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŒŒ์ผ์„ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ยท ์ค‘๊ฐ„ ํŒŒ์ผ์€ ์‚ญ์ œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (makepp์€ ๋ชจ๋“  ํŒŒ์ผ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ์ฃผ์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—
๋‚ ์งœ๋Š” ๋งˆ์ง€๋ง‰ ๋นŒ๋“œ์˜ ๋‚ ์งœ์™€ ๋™์ผํ•ด์•ผ ํ•˜๋ฉฐ ์ค‘๊ฐ„ ํŒŒ์ผ์€ ๋ชจ๋‘
๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์žฌ๊ตฌ์ถ•์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.) ๋‹ค์Œ์— ๋ถ€์—ฌ๋˜๋Š” ํŠน๋ณ„ํ•œ ์ƒํƒœ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
์ค‘๊ฐ„ ํŒŒ์ผ.

ยท ์ง€์›๋˜๋Š” ์œ ์ผํ•œ ํŠน์ˆ˜ ๋Œ€์ƒ์€ ".PHONY"์ด๊ณ  ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ".SUFFIXES"์ž…๋‹ˆ๋‹ค. ๊ทธ๋งŒํผ
๋‚˜๋จธ์ง€๋Š” ๋‹จ์ˆœํžˆ ํก์ˆ˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ GNU make์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน๋ณ„ํ•œ ๋ชฉํ‘œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค:

.์ ‘๋ฏธ์‚ฌ
Makepp์€ ".SUFFIXES"๋ผ๋Š” ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ".SUFFIXES"๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.
๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ข…์†์„ฑ:

.์ ‘๋ฏธ์‚ฌ:

์ด๋Š” ๊ธฐ๋ณธ ๊ทœ์น™์„ ๋กœ๋“œํ•˜์ง€ ์•Š๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค.

.์ค‘๊ธ‰, .XNUMX์ฐจ, .๊ท€์ค‘
์ค‘๊ฐ„ ํŒŒ์ผ์—๋Š” ํŠน๋ณ„ํ•œ ์ƒํƒœ๊ฐ€ ๋ถ€์—ฌ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ๋Œ€์ƒ์€
์˜๋ฏธ์žˆ๋Š”.

.๋ฌด์‹œํ•˜๋‹ค
์ด ๋Œ€์ƒ์€ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๋ฅผ ๋ฌด์‹œํ•˜๋ ค๋ฉด "ignore_error"๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.
์ข…๋ฃŒ ์ƒํƒœ๋ฅผ ๋ฌด์‹œํ•  ๋ช…๋ น ์•ž์— (๋˜๋Š” ๋นผ๊ธฐ ๊ธฐํ˜ธ)๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค.

.์กฐ์šฉํ•œ
์ด ๋Œ€์ƒ์€ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์ด ์—์ฝ”๋˜์ง€ ์•Š๋„๋ก ํ•˜๋ ค๋ฉด "noecho"๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.
(๋˜๋Š” "@" ๋ฌธ์ž) ๋ฐ˜ํ–ฅ๋˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ๋ช…๋ น ์•ž์—,
๋˜๋Š” makepp์— "--silent" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

.DELETE_ON_ERROR
.EXPORT_ALL_VARIABLES
.NOEXPORT
.POSIX
.๊ธฐ๋ณธ
์ด๋Ÿฌํ•œ ๋Œ€์ƒ์€ ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ ๊ฐ„๋‹จํžˆ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.

ยท GNU make ํ•จ์ˆ˜ "eval", "flavor" ๋ฐ "value"๋Š” ํ˜„์žฌ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋„ˆ
"$[...]"๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณด๋‹ค ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ eval๊ณผ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ณ€์ˆ˜ ๋˜๋Š” ํ•จ์ˆ˜ ํ™•์žฅ.

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

์—::b
&cat b -oa

# ๋‚˜์ค‘์— makefile์—์„œ:
a::c
&cat c -o >>a

๊ทธ๊ฒƒ์€ ์ •ํ™•ํ•˜๊ฒŒ ๋„ค๊ฐ€ ์“ด ๊ฒƒ๊ณผ ๋˜‘๊ฐ™์•„

์— : ๊ธฐ์›์ „
&cat b -oa
&cat c -o >>a

์ด๋Š” ํ™•์‹คํžˆ ์ด์ค‘ ์ฝœ๋ก  ๊ทœ์น™์˜ ์˜๋„๊ฐ€ ์•„๋‹ˆ๋ฉฐ ํ•ญ์ƒ ๊ทธ๋Ÿฐ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.
์ž‘๋™ํ•˜์ง€๋งŒ "clean"๊ณผ ๊ฐ™์€ ๋Œ€์ƒ์ด๋‚˜ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ชจ๋“  ํ•ญ๋ชฉ์—๋Š” ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
ExtUtils::MakeMaker๋Š” makefile์— ๋„ฃ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•˜์ง€ ๋งˆ์„ธ์š”
๋ ˆ๊ฑฐ์‹œ makefile๋ณด๋‹ค.

ยท "$(wildcard )" ํ•จ์ˆ˜๋Š” ์กด์žฌํ•˜๋Š” ํŒŒ์ผ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŒŒ์ผ๋„ ์ผ์น˜์‹œํ‚ต๋‹ˆ๋‹ค.
์•„์ง ์กด์žฌํ•˜์ง€ ์•Š์ง€๋งŒ ๋‹น์‹œ makepp์—์„œ ๋ณธ ๊ทœ์น™์ด ์žˆ์Šต๋‹ˆ๋‹ค.
"$(wildcard )" ํ•จ์ˆ˜๊ฐ€ ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค.

ยท "define" ๋ฌธ์„ ์ง€์›ํ•˜์ง€๋งŒ ๊ทธ ์•ž์˜ "@" ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
๋‹ค๋ฅด๊ฒŒ. ํ˜„์žฌ makepp์—์„œ๋Š” ์—ฌ๋Ÿฌ ์ค„์ด ์žˆ๋Š” ๋ณ€์ˆ˜ ์•ž์— "@"๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐ’์€ ์ฒซ ๋ฒˆ์งธ ์ค„์˜ ์—์ฝ”๋งŒ ์–ต์ œํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด,

์—์ฝ” ๋ผ์ธ ์ •์˜
&์—์ฝ” ๋ผ์ธ1 -o $@
&์—์ฝ” ๋ผ์ธ2 -o>>$@
์—”๋ฐํ”„

x:
@$(์—์ฝ”๋ผ์ธ)

GNU make์—์„œ์ฒ˜๋Ÿผ "&echo line2"์˜ ์ธ์‡„๋ฅผ ์–ต์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿด ๊ฒƒ์ด๋‹ค
"&echo line1" ์ธ์‡„๋ฅผ ์–ต์ œํ•ฉ๋‹ˆ๋‹ค.

ยท Makepp์—์„œ๋Š” ๋‹ค์Œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์„ค์ •ํ•˜์ง€ ์•Š์Œ,
๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ƒฅ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค):

๋ณ€์‹ 
MFLAGS

๋น„ ํ˜ธํ™˜์„ฑ in ์ฃผ๋ฌธ of ํ‘œํ˜„ ํ™•์žฅ
ยท makepp์—์„œ๋Š” ๋ชจ๋“  ์ข…์†์„ฑ์ด ๋ณด์žฅ๋˜๊ธฐ ์ „์— ๊ทœ์น™ ์ž‘์—…์ด ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค.
๊ฑด์„ค๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์„ ๋ณ€๊ฒฝํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

foo: ๋ฐ”
genfoo < $(์‰˜ ์บฃ๋ฐ”)

์ด์—:

foo: ๋ฐ”
genfoo <`๊ณ ์–‘์ด ๋ฐ”`

๋˜๋Š” ํ™•์žฅ ์ค‘์— ํŒŒ์ผ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

foo: ๋ฐ”
genfoo < $(&cat $(make bar))

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

ยท ์ด๊ฒƒ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ณธ ์ ์ด ์—†์ง€๋งŒ GNU make๋Š” ๋‹ค์Œ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค:

์ฝœ๋ก  = :
a$(์ฝœ๋ก )b
์—์ฝ” $^

Makepp์€ "$(์ฝœ๋ก )"์„ ๋„ˆ๋ฌด ๋Šฆ๊ฒŒ ํ™•์žฅํ•˜์—ฌ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค
๋Œ€์ฒด "$[์ฝœ๋ก ]" ๊ตฌ๋ฌธ์€ GNU make๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋งŽ์€ ์ผ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์•„์ฃผ ์ผ์ฐ ํ™•์žฅ๋์–ด์š”.

"$(๋งŒ๋“ค๊ธฐ)" ๏ผ•์›” ํฌํ•จ ๊ณต๊ฐ„
์ œ๊ฑฐ๋œ makepp์—์„œ ๋˜๋Š” ํ”Œ๋žซํผ์ด Perl ์Šคํฌ๋ฆฝํŠธ ์‹œ์ž‘์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์€ ๊ฒฝ์šฐ
๋งค์ง ๋„˜๋ฒ„ ๋˜๋Š” "--traditional-recursive-make"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋ณ€์ˆ˜์—๋Š” ์ตœ์†Œํ•œ
ํ•œ ๊ณต๊ฐ„. ๋ช…๋ น์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์„ ์ „๋‹ฌํ•  ๋•Œ
Perl 5.14.0 ๋นŒ๋“œ ์‹œ์Šคํ…œ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋”ฐ์˜ดํ‘œ๊ฐ€ ์—†๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์Šคํฌ๋ฆฝํŠธ์— ์ถ”๊ฐ€ํ•˜๋ฉด ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ฐข์–ด์ง‘๋‹ˆ๋‹ค.
๋ณ„๋„์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ถ„๋ฆฌ๋˜์–ด ํ˜ผ๋ž€์„ ์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.
'$(MAKE)'๋กœ ์ธ์šฉํ•˜์„ธ์š”. ์ด๋Š” ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ๊นจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํƒ€๊ฒŸ๋ณ„ ํ• ๋‹น ํ•˜์ง€ ์ „ํŒŒํ•˜๋‹ค
Makepp์˜ ํƒ€๊ฒŸ๋ณ„ ๋ณ€์ˆ˜๋Š” GNU make์™€ ์•ฝ๊ฐ„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
์–ธ๊ธ‰๋œ ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ๋Œ€ํ•œ ๊ทœ์น™์—๋งŒ ์ ์šฉ๋˜๋ฉฐ ์ด์ „ ํŒŒ์ผ์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณด๋‹ค
๋Œ€์ƒ๋ณ„ ํ• ๋‹น.

๊ด„ํ˜ธ or ๋ฐ”์ง€ ๋ฉœ๋นต ํ•˜์ง€ ๋‘ฅ์ง€
Makepp์€ ์ผ์น˜ํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๊ด„ํ˜ธ ๋˜๋Š” ์ค‘๊ด„ํ˜ธ์—์„œ ํ‘œํ˜„์‹์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ ๋Œ€์‹ ์—

$(somefunction ... ( ) ...) # GNU make ์Šคํƒ€์ผ

๋‘˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

${somefunction ... ( ) ...} # GNU ํ˜ธํ™˜ ๊ฐ€๋Šฅ
$((somefunction ... ( ) ...)) # Makepp ํ™•์žฅ

์ด ๋ฌธ์ œ๋Š” ๋ฒ„์ „ 2.1์—์„œ ์ˆ˜์ •๋  ์ˆ˜๋„ ์žˆ๊ณ  ์„ ํƒ์ ์œผ๋กœ ์ˆ˜์ •๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฏธ์„ฑ๋…„์ž ์ „์ฒ ๊ธฐ
ํŒจํ„ด ์ข…์†์„ฑ์ด ๊ฐ€์งœ ๋Œ€์ƒ๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
%.a: %.b; ...
$(๊ฐ€์งœ xb): ; ... # xa๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€์—๋Š” ์—ฐ์† ์ค„์ด ์—†์Šต๋‹ˆ๋‹ค.
# ์ด๊ฒƒ์€ \
2์ค„ ์ฃผ์„์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋ช…๋ น ์„  ๋น„ ํ˜ธํ™˜์„ฑ


Makepp์€ make์˜ ๋”์šฑ ์œ ์šฉํ•œ ๋ช‡ ๊ฐ€์ง€ ๋ช…๋ น์ค„ ์˜ต์…˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ์€
์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค:

-d ๋˜๋Š” --debug
-f -
Makepp์˜ ๋‚ด๋ถ€ makefile ๊ฐœ์ฒด๋Š” ํŒŒ์ผ ๊ฐœ์ฒด์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
ํ‘œ์ค€ ์ž…๋ ฅ

-i
-l ๋˜๋Š” --load-average ๋˜๋Š” --max-load
-m Makepp์˜ "-m" ์˜ต์…˜์€ ์„œ๋ช… ๋ฐฉ๋ฒ• ์„ ํƒ๊ณผ ๊ด€๋ จ์ด ์žˆ์ง€๋งŒ GNU make
-m์„ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

-p ๋˜๋Š” --print-data-base
-q ๋˜๋Š” --question
-R ๋˜๋Š” --no-builtin-๋ณ€์ˆ˜
Makepp์˜ "-R" ์˜ต์…˜์€ ์‹ค์ œ๋กœ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

-S --๊ณ„์† ์ง„ํ–‰ํ•˜์ง€ ์•Š์Œ ๋˜๋Š” --stop
"--stop" ์˜ต์…˜์€ ๋ชจ๋“  ๊ทœ์น™์„ ํ•™์Šตํ•œ ํ›„ makepp๋ฅผ ์ค‘์ง€(์ž ์ž๊ธฐ ์ƒํƒœ๋กœ ์ „ํ™˜)ํ•˜๋ฏ€๋กœ
๊ณ„์† ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

-t ๋˜๋Š” --touch
-w ๋˜๋Š” --print-directory
์ด๋Š” ์ž๋™์œผ๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

--๊ฒฝ๊ณ -์ •์˜๋˜์ง€ ์•Š์€-๋ณ€์ˆ˜

๋ˆ„๊ตฌ๋“ ์ง€ ๊ด€์‹ฌ์„ ๊ฐ–๋Š”๋‹ค๋ฉด ์ด๋“ค ์ค‘ ์ผ๋ถ€๋Š” ์‰ฝ๊ฒŒ ์ง€์›๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณ€ํ•˜๊ธฐ ์‰ฌ์šด ๋น„ ํ˜ธํ™˜์„ฑ


Makepp์€ $PATH์—์„œ "$(CC)" ๋˜๋Š” "$(CC)"์™€ ๊ฐ™์€ ๋ณ€์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ผ์น˜ํ•˜๋Š” ๋ช…๋ น์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
"$(CXX)", GNU make์—๋Š” ์ •์  ๊ธฐ๋ณธ๊ฐ’์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ makepp์€ "gcc"๋ฅผ ์„ ํ˜ธํ•˜๋ฉฐ
"g++"๋Š” ๋†€๋ž๊ฒŒ๋„ GNU make๊ฐ€ ์ „์ž์— ๋Œ€ํ•ด์„œ๋Š” "cc"๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ,
ํ›„์ž. makefile, ๋ช…๋ น์ค„ ๋˜๋Š” ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
makepp๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ๋™์ผํ•œ ์ด๋ฆ„์˜ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

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


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

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

Linux ๋ช…๋ น

Ad