Red Hat ์ง์›์ด ๋ชฉํ‘œ ์กฐ๋ฆฝ ์‹œ์Šคํ…œ์„ ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค. GNU Make 4.2 ์ถœ์‹œ

์ €์ž ๋ฆฌ์ฐจ๋“œ WM ์กด์Šค libguestfs, Red Hat์—์„œ ์ผํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋„์ž… ๋œ ์ƒˆ๋กœ์šด ์–ด์…ˆ๋ธ”๋ฆฌ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ชฉํ‘œ, ์Šคํฌ๋ฆฝํŠธ์˜ ์ „๋ฐ˜์ ์ธ ๋‹จ์ˆœ์„ฑ๊ณผ ์ดํ•ด ๊ฐ€๋Šฅ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ make ์œ ํ‹ธ๋ฆฌํ‹ฐ์˜ ๋‹จ์ ๊ณผ ๋ฌธ์ œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. make ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” 1976๋…„์— ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ ๊ฐœ๋…์ƒ ๋งŽ์€ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Goals๋Š” ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋…์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ์ œ๊ฑฐํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.
๋ชฉํ‘œ ์†Œ์Šค ์ฝ”๋“œ ๋ฐฐํฌ์ž GPLv2+์— ๋”ฐ๋ผ ๋ผ์ด์„ผ์Šค๊ฐ€ ๋ถ€์—ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋œ ๋ฌธ์ œ:

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

    Red Hat ์ง์›์ด ๋ชฉํ‘œ ์กฐ๋ฆฝ ์‹œ์Šคํ…œ์„ ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค. GNU Make 4.2 ์ถœ์‹œ

  • ์กฐ๋ฆฝ ์ง€์นจ์— ํ•˜๋‚˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋งŒ ์ œ๊ณตํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

    Red Hat ์ง์›์ด ๋ชฉํ‘œ ์กฐ๋ฆฝ ์‹œ์Šคํ…œ์„ ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค. GNU Make 4.2 ์ถœ์‹œ

    ๋ชฉํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž„์˜ ๊ฐœ์ˆ˜์˜ ๋ช…๋ช…๋œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด๋ฆ„์—์„œ ๋””๋ฒ„๊ทธ ํŒŒ์ผ์˜ ๊ธฐํ˜ธ๋ฅผ ๋ณ„๋„๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    Red Hat ์ง์›์ด ๋ชฉํ‘œ ์กฐ๋ฆฝ ์‹œ์Šคํ…œ์„ ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค. GNU Make 4.2 ์ถœ์‹œ

  • ์‰˜ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋ฆ„์˜ ๊ณต๋ฐฑ ์ด์Šค์ผ€์ดํ”„๋ฅผ ์ œ์–ดํ•ด์•ผ ํ•˜๋Š” ํ•„์š”์„ฑ, ๊ฐ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ ๋ณ„๋„์˜ ์…ธ ํ•ด์„๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๋”ฐ๋ฅธ ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„, "$" ๋ฌธ์ž(์…ธ๊ณผ make ๋ชจ๋‘์—์„œ ์‚ฌ์šฉ๋จ)์˜ ์ด์ค‘ ํ•ด์„, ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.

    ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” ๊ตฌ๋ฌธ ๋ถ„์„๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–ด์…ˆ๋ธ”๋ฆฌ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด "$" ๋Œ€์‹  "%" ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชฉํ‘œ์—์„œ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค("$"๋Š” ์…ธ์—๋งŒ ๋‚จ์•„ ์žˆ์Œ). LALR(1), ๊ฒฝ๋กœ์™€ ํŒŒ์ผ ์ด๋ฆ„์„ ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ๊ณ  ์ค‘๊ด„ํ˜ธ๋กœ ์ฝ”๋“œ ๋ธ”๋ก์„ ๊ฐ•์กฐ ํ‘œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ๋ช…๋ น ๋ธ”๋ก์€ ๋ช…๋ น ์…ธ์˜ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค์—์„œ ์‹œ์ž‘๋˜๋ฉฐ ๋ธ”๋ก ๋‚ด์—์„œ๋Š” ํŠน์ˆ˜ ๊ณต๋ฐฑ์„ ์ฐธ์กฐํ•˜์ง€ ์•Š๊ณ  ์ž„์˜์˜ ์ฝ”๋“œ ํ˜•์‹์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

    ๊ทธ๊ฒƒ์€ :
    ๋Œ€์ƒ: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

    ๊ทธ๊ฒƒ์€๋˜์—ˆ๋‹ค :
    "๋Œ€์ƒ": "foo.o", "bar.o" {
    %CC %CFLAGS %< -o %@
    }

๋ชฉํ‘œ์˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ:

  • ์ž„์˜์˜ ์ด๋ฆ„ ๋ฐ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ง€์ •์„ ์œ„ํ•œ ์„ ํƒ์  ์ง€์›:

    ๋ชฉํ‘œ ๋ชจ๋‘ = : "๋Œ€์ƒ"

    ๋ชฉํ‘œ ๋งํฌ =
    "๋Œ€์ƒ": "foo.o", "bar.o" { ... }

    ๋ชฉํ‘œ ์ปดํŒŒ์ผ(์ด๋ฆ„) =
    "%name.o": "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • ๋‘ ๊ฐ€์ง€ ์‹œ์ž‘ ๋ชจ๋“œ: ๋นŒ๋“œ ํƒ€๊ฒŸ์„ ํŒŒ์ผ ์ด๋ฆ„๊ณผ ์ผ์น˜์‹œํ‚ค๋Š” make ๋ชจ๋“œ(์˜ˆ: ํŒŒ์ผ "foo.o"๊ฐ€ ํƒ€๊ฒŸ "%name.o"์™€ ์ผ์น˜) ๋ฐ ์ง์ ‘ ์ปดํŒŒ์ผ ๋ชจ๋“œ:

    ๋ชฉํ‘œ ๋ชจ๋‘ = : ๋งํฌ

    ๋ชฉํ‘œ ๋งํฌ =
    "๋Œ€์ƒ": "foo.o", ์ปดํŒŒ์ผ("๋ฐ”") { ... }

    ๋ชฉํ‘œ ์ปดํŒŒ์ผ(์ด๋ฆ„) =
    "%name.o": "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • ์กฐ๋ฆฝ ์ „์ˆ ์€ ์กฐ๋ฆฝ ๋Œ€์ƒ์„ ์žฌ์กฐ๋ฆฝํ•  ํ•„์š”์„ฑ์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜ ๊ทœ์น™์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ์กด์žฌ์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉด ์ด๋Š” ํ•ด๋‹น ๊ธฐํ˜ธ(๊ทœ์น™ ์ด๋ฆ„์˜ ๊ฒฝ์šฐ "target", ํŒŒ์ผ ํ™•์ธ์˜ ๊ฒฝ์šฐ *file("target"))๋ฅผ ํ†ตํ•ด ๋ช…์‹œ์ ์œผ๋กœ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

    "๋Œ€์ƒ": "foo.o", "bar.o" { ... }

    *file("๋Œ€์ƒ") : *file("foo.o"), *file("bar.o") { ... }

  • ๊ฐœ๋ฐœ์ž๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ ์ „์ˆ ์˜ ์ž„์˜ ์†์„ฑ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "*file" ํ”Œ๋ž˜๊ทธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค(@{...}๋Š” ์ถœ๋ ฅ ์–ต์ œ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  "exit 99"๋Š” ์žฌ๊ตฌ์ถ•์ด ํ•„์š”ํ•จ์„ ๋‚˜ํƒ€๋ƒ„).

    ์ „์ˆ  *file (ํŒŒ์ผ ์ด๋ฆ„) = @{
    test -f %ํŒŒ์ผ๋ช… || 99๋ฒˆ ์ถœ๊ตฌ
    f(%)์˜ ๊ฒฝ์šฐ

    ์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€