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