Ninja: ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์ƒ๋Œ€ ๊ฒฝ๋กœ์™€ depfile ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ํ˜ผํ•ฉํ•˜๋ฉด ๋‹ค์‹œ ๋นŒ๋“œ๊ฐ€ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2017๋…„ 02์›” 24์ผ  ยท  70์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ninja-build/ninja

๋‹Œ์ž ๋งค๋‰ด์–ผ์€ ์ด๋Ÿฌํ•œ ํ˜ผํ•ฉ์— ๋Œ€ํ•ด ๊ฒฝ๊ณ ํ•˜์ง€๋งŒ ์‹ฌ๊ฐํ•œ ์ œํ•œ ์‚ฌํ•ญ์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ์†Œ์Šค ํŒŒ์ผ์— ๋Œ€ํ•œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด IDE๊ฐ€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์™€ ์ผ์น˜ํ•˜๊ณ  ์›๋ณธ ํŒŒ์ผ์„ ๋‹ค์‹œ ์ฐธ์กฐํ•˜๋„๋ก ๋” ๋‚˜์€ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋””๋ฒ„๊ทธ ์ •๋ณด์— ๊ธฐ๋ก๋œ ๊ฒฝ๋กœ์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ๋นŒ๋“œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์˜ ์ƒ๋Œ€ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ๋‹Œ์ž์˜ ๊ธฐ๋ณธ ์„ค์ •๊ณผ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. ninja-bug.bash.txt

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์†”๋ฃจ์…˜์ด "๋‹ค๋ฅธ ๋ชจ๋“  ๋„๊ตฌ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ"ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

1924๋Š” ninja_workdir ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐœ์ „๊ธฐ๋Š” ์œ„์˜ ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  70 ๋Œ“๊ธ€

์ฐธ์กฐ: @nico @chaoren

CMake์˜ ๋ฌธ์ œ 16675 , ๋ฌธ์ œ 13894 ๋ฐ MR 520 ์— ๊ด€๋ จ ํ† ๋ก ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด "."๋„ ํฌํ•จํ•˜์—ฌ ๊ฐœ์ฒด ์ถœ๋ ฅ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ".."์ด์ง€๋งŒ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
ninjatst.bash.txt

@zlolik IIUC ๋นŒ๋“œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ( build.ninja ) ๊ทธ๋ž˜ํ”„ ๋…ธ๋“œ์— ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ๊ทธ๊ฒƒ์€ ์ž‘๋™ํ•˜์ง€๋งŒ(CMake๊ฐ€ ์†Œ์Šค ์™ธ๋ถ€ ๋นŒ๋“œ์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค) ์—ฌ๊ธฐ์„œ ์ œ ์š”์ ์€ Ninja๋Š” ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š์ง€๋งŒ IDE๋Š” ์ถœ๋ ฅ์—์„œ โ€‹โ€‹์ด๋ฅผ ์š”๊ตฌํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

-c foo.c ๊ฐ€ ์ฃผ์–ด์ง„ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์–ด์จŒ๋“  depfile์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฐ€์„ค๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋ฉด Ninja๋Š” ์—ฌ๊ธฐ์— ๋ณด๊ณ ๋œ ๋™์ผํ•œ ๋ฌธ์ œ๋กœ ์ธํ•ด ์ข…์†์„ฑ์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด Ninja๊ฐ€ ์ƒ๋Œ€ ๊ฒฝ๋กœ์™€ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ๋™์ผํ•œ ํŒŒ์ผ์ด๊ณ  ๋‚ด๋ถ€์ ์œผ๋กœ ๋‘ ๊ฐœ ๋Œ€์‹  ํ•˜๋‚˜์˜ ๊ทธ๋ž˜ํ”„ ๋…ธ๋“œ๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋‚ด์—์„œ ๊ฒฝ๋กœ ์ด๋ฆ„์„ ์ผ๊ด€๋˜๊ฒŒ ์ง€์ •ํ•˜๋„๋ก build.ninja ์ƒ์„ฑ๊ธฐ์— ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ฏ€๋กœ depfile ์ฒ˜๋ฆฌ์—๋งŒ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ถฉ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@bradking ์šฐ์„ , ๋‹Œ์ž์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜๋ฉฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๋งŒ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.
3๊ฐœ์˜ ์—ฐ๊ฒฐ๋œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  1. ์ž…๋ ฅ ์ ˆ๋Œ€/์ƒ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š” ๋…ผ๋ฆฌ, ์ž์„ธํ•œ ๋‚ด์šฉ์€ #1152 .
  2. ์ ˆ๋Œ€/์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๊ฐ•์ œ๋กœ ์ถœ๋ ฅํ•˜๋Š” ๋…ผ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋ฌธ์ œ - ์ถœ๋ ฅ์— ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๊ฐ–๊ณ  ์‹ถ๋‹ค๊ณ  ์ปดํŒŒ์ผ๋Ÿฌ์— ์•Œ๋ฆฌ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๋ช…๋ น์ค„์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹Œ์ž ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ ์šฐ๋ฆฌ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
  3. depfile ์ ˆ๋Œ€/์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๋…ผ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ.

2๊ฐ€์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  1. build.ninja $p ๋ฐ $o ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜์Œ 2๊ฐœ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์‹ญ์‹œ์˜ค. ์ œ ๊ฒฝ์šฐ์—๋Š” $p ๋ฐ $o ๊ฐ€ ์ ˆ๋Œ€์ ์ด์ง€ ์•Š๊ณ  build.ninja ์ƒ์„ฑ๊ธฐ๊ฐ€ ์‹คํ–‰๋œ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ƒ๋Œ€์ ์ž…๋‹ˆ๋‹ค.
  2. ์ผ๋ถ€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ depfile์„ ๋‹Œ์ž ํ˜ธํ™˜ ๊ฒฝ๋กœ๋กœ ๋ณ€ํ™˜ํ•˜์‹ญ์‹œ์˜ค. ์ผ๋ถ€ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” depfile์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ํ˜ธ์ถœ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ๋ฌธ์ œ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์ €๋Š” ์ œ์•ˆ๋œ ์†”๋ฃจ์…˜์œผ๋กœ ninja-build ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ์—์„œ ์Šค๋ ˆ๋“œ ๋ฅผ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋””๋ฒ„๊ทธ ๋ฐ ์ ์šฉ ๋ฒ”์œ„ ์ •๋ณด์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ๊ด€๋ จ ๋ฌธ์ œ: ์ƒ๋Œ€ ๊ฒฝ๋กœ์™€ ํ•จ๊ป˜ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ์ƒ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š” ๋””๋ฒ„๊ทธ ์ •๋ณด ํŒŒ์ผ๋„ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๋””๋ฒ„๊ทธ ํŒŒ์ผ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ์†Œ์Šค ํŒŒ์ผ์ด ์•„๋‹ˆ๋ผ ๊ฐœ์ฒด ํŒŒ์ผ ์˜†์— ์œ„์น˜ํ•˜๋ฏ€๋กœ ํ•ด๋‹น ์œ„์น˜์˜ ์ƒ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ์„ ์ฐธ์กฐํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ ์Šค๋ ˆ๋“œ์— ์‘๋‹ต์ด ์—†์Šต๋‹ˆ๋‹ค...

์—ฌ๋Ÿฌ๋ถ„, ์•ˆ๋…•ํ•˜์„ธ์š”,

-c foo.c ์ฃผ์–ด์ง„ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์–ด์จŒ๋“  depfile์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฐ€์„ค๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

IAR v8์˜ ์ข…์†์„ฑ ํŒŒ์ผ์—๋Š” ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋งŒ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

CMake/Ninja/IAR์„ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์Šค ์™ธ๋ถ€ ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. CMake์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋๋‚˜๋Š” ์ƒ์„ฑ๋œ ํŒŒ์ผ์€ Ninja ๋งค๋‹ˆํŽ˜์ŠคํŠธ์—์„œ ์ƒ๋Œ€์ ์ด๊ณ  IAR์˜ deps ์ถœ๋ ฅ์€ ์ ˆ๋Œ€์ ์ž…๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ ์ด๊ฒƒ์€ ๋ถ„๋ช…ํžˆ ๋‹Œ์ž ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋ฌด์Šจ ์ผ์ด ์žˆ์–ด๋„ ๋™์ผํ•œ ํŒŒ์ผ์— ๋Œ€ํ•ด ๋‘ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

@bradking ์˜ ์ œ์•ˆ ์„ ์ฝ์—ˆ์ง€๋งŒ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์— ๋Œ€ํ•œ ๋ถ€๋ถ„๊ณผ getcwd() ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋ฅผ ์ •๋ง ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์— ๋Œ€ํ•œ ๋ถ€๋ถ„๊ณผ getcwd() ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋ฅผ ์ •๋ง๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

@sebknzl ๋ฌธ์ œ๋Š” ์ƒ์„ฑ๊ธฐ์— ์˜ํ•ด build.ninja ์— ์“ฐ์—ฌ์ง„ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ์ด๋Ÿฐ์ €๋Ÿฐ ์ด์œ ๋กœ ์˜๋„์ ์œผ๋กœ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. getcwd() ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ€ ํ™•์ธ๋œ ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Ninja๊ฐ€ ๋นŒ๋“œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์˜ ์ƒ๋Œ€ ๊ฒฝ๋กœ ๋˜๋Š” getcwd() ์— ์ƒ๋Œ€์ ์ธ depfile์„ ํ•ด์„ํ•˜๋Š” ๊ฒฝ์šฐ Ninja๊ฐ€ ๊ตฌ์„ฑํ•˜๋Š” ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋Š” ๋นŒ๋“œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์ƒ์„ฑ๊ธฐ๊ฐ€ ์‚ฌ์šฉํ•œ ๊ฒƒ๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์—ฌ์ „ํžˆ ๋‘ ๊ฐœ์˜ ๋…ธ๋“œ๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งํฌํ•œ ์Šค๋ ˆ๋“œ์—์„œ ์ œ์•ˆํ•œ ninja_workdir ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Ninja์—๊ฒŒ ์ƒ๋Œ€ ๊ฒฝ๋กœ์˜ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ๋œ ์ƒ์„ฑ๊ธฐ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ realpath(ninja_workdir) == realpath(getcwd()) ๋Š” ํ•ญ์ƒ ์ฐธ์ด์–ด์•ผ ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ninja_workdir == getcwd() ๋ฅผ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ๋Œ€์•ˆ์€ Ninja๊ฐ€ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ „์— ๋ชจ๋“  ๊ฒƒ์„ realpath ํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ ์ด๋Š” $in ๊ฐ€ ์ƒ์„ฑ์ž๊ฐ€ ์˜๋„ํ•œ ๋Œ€๋กœ ํ™•์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

@jhasse ์ด ๋ฌธ์ œ์™€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋‚ด ์ œ์•ˆ ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

CMAKE_NINJA_GENERATOR_OPTION_ ์— ์˜ํ•ด ์ œ์–ด๋˜๋Š” ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ _build.ninja_ ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ฆ‰, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

Claus-MBP:build clausklein$ cat build.ninja 

# project dir
p = /Users/clausklein/Downloads
# object dir
o = /Users/clausklein/Downloads/.ninjatst.build

rule cp
  command = cp $in $out

rule cc
  depfile = $out.d
  deps = gcc
  command = cc -I$o -c $in -o $out -MD -MT $out -MF $out.d

# All absolute paths works
build all: phony $o/foo.o

# All absolute paths works
build $o/foo.h: cp $p/foo.h.in
  IN = $p/foo.h.in

# All absolute paths works
build $o/foo.o: cc $p/foo.c || $o/foo.h
  IN = "$p/foo.c"

default all

Claus-MBP:build clausklein$ 

ninjatst.bash.txt ๋กœ ์ƒ์„ฑ

@ClausKlein ์šฐ๋ฆฌ๋Š” CMake์—๊ฒŒ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ€๋ฅด์น˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/ninja-build/ninja/issues/1251#issuecomment -282322776์— ๋งํฌ๋œ ํ† ๋ก ์„ ์ฐธ์กฐํ•˜์„ธ์š”. "์ผ๋ถ€ ๊ฒฝ์šฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋ฅผ ์ค‘๋‹จ์‹œํ‚ค๋Š” ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค"๋ผ๋Š” ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜์ • ํ•˜๋ ค๋ฉด https://github.com/ninja-build/ninja/issues/1251#issuecomment -487618865์— ๋งํฌ๋œ ์ œ์•ˆ์„œ์— Ninja ๊ธฐ๋Šฅ์ด ์ •๋ง ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์•Œ์•˜์–ด ๊ดœ์ฐฎ์•„

๊ทธ๋Ÿฐ ๋‹ค์Œ mesonbuild ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ด ์ˆ˜์ • ์‚ฌํ•ญ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ ;-)

Am 12.03.2020 um 12:56 schrieb Brad King [email protected] :

@ClausKlein https://github.com/ClausKlein ์šฐ๋ฆฌ๋Š” CMake์—๊ฒŒ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ€๋ฅด์น˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. #1251 (comment) https://github.com/ninja-build/ninja/issues/1251#issuecomment-282322776 ์—์„œ ๋งํฌํ•œ ํ† ๋ก ์„ ์ฐธ์กฐํ•˜์„ธ์š”. "์ผ๋ถ€ ๊ฒฝ์šฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋ฅผ ์ค‘๋‹จ์‹œํ‚ค๋Š” ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค"๋ผ๋Š” ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜์ •ํ•˜๋ ค๋ฉด #1251(comment) https://github.com/ninja-build/ninja/issues/1251#issuecomment-487618865 ์— ๋งํฌ๋œ ์ œ์•ˆ์„œ์˜ Ninja ๊ธฐ๋Šฅ์ด ์ •๋ง ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub https://github.com/ninja-build/ninja/issues/1251#issuecomment-598146822 ์—์„œ ํ™•์ธํ•˜๊ฑฐ๋‚˜ https://github.com/notifications/unsubscribe-auth/AAN7QWWEDHMDA45DQVPLOUDRHDEVDANCNFSM4DBNL6GA ๊ตฌ๋…์„ ์ทจ์†Œํ•˜์„ธ์š”.

Ninja๊ฐ€ ์ผ์น˜ํ•˜๋Š” depfile ์ •๋ณด์— ninja_workdir ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋กœ ์ธํ•ด ninja_workdir != getcwd() ์ธ ์ƒํ™ฉ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ด์ œ getcwd() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ธ์‡„ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ?

์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ƒ๋Œ€ ๊ฒฝ๋กœ๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š๋Š” ํ•œ getcwd() ๋ฅผ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋นŒ๋“œ ์‹œ์Šคํ…œ ์ƒ์„ฑ๊ธฐ๊ฐ€ ์ฑ…์ž„์„ ์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜๋Š” ninja_workdir ๋ฐ getcwd() ๋ชจ๋‘๋ฅผ ์ •๊ทœํ™”ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธ€์Ž„, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ƒ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ depfile์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜ ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค .

@ClausKlein ์šฐ๋ฆฌ๋Š” CMake์—๊ฒŒ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ€๋ฅด์น˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. #1251(๋Œ“๊ธ€)์— ๋งํฌ๋œ ํ† ๋ก ์„ ์ฐธ์กฐํ•˜์„ธ์š”. "์ผ๋ถ€ ๊ฒฝ์šฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋ฅผ ์ค‘๋‹จ์‹œํ‚ค๋Š” ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค"๋ผ๋Š” ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@ClausKlein์ด ์ œ์•ˆํ•œ ๋Œ€๋กœ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์ •ํ™•ํžˆ ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๊นŒ?

์ปดํŒŒ์ผ๋Ÿฌ์— ์ ˆ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ์ƒ์„ฑํ•˜๋Š” depfile์€ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ด๋Š” ์ƒ์„ฑ๋œ ํ—ค๋”์˜ ๊ฒฝ์šฐ์™€ ๊ฐ™์ด ๋นŒ๋“œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์˜ ํ—ค๋”์— ๋Œ€ํ•œ ์ƒ๋Œ€ ๊ฒฝ๋กœ์™€ ์กฐ์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์˜ ๋งจ ์œ„์— ์žˆ๋Š” ๋‚ด ์ฒซ ๋ฒˆ์งธ ๊ฒŒ์‹œ๋ฌผ์˜ ninja-bug.bash.txt ๋งํฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ๊ทธ๊ฒƒ์€ ์ผ์–ด๋‚˜๋Š” ์ผ์— ๋Œ€ํ•œ ๋‹จ๊ณ„๋ณ„ ์˜ˆ๋ฅผ ๋ณด์—ฌ์ฃผ๋ฉฐ CMake๊ฐ€ ์•„๋‹Œ Ninja์˜ ๊ด€์ ์—์„œ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ฝ์—ˆ์ง€๋งŒ ์™œ https://github.com/ninja-build/ninja/issues/1251#issuecomment -284533599๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๋‹จ์ˆœํžˆ ๋‹Œ์ž๊ฐ€ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ "์ ˆ๋Œ€"ํ•˜๊ธฐ ๋•Œ๋ฌธ์—? ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๊ฒƒ์€ ๋ฌธ์„œ ๋ณ€๊ฒฝ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

build.ninja ํŒŒ์ผ์€ ๋ชจ๋“  ๊ณณ์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๊ณ  ํ›จ์”ฌ ์ž‘์•„์„œ ๋” ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค. ๋˜ํ•œ ๋” ๋ณด๊ธฐ ์ข‹๊ณ  ๋””๋ฒ„๊ทธํ•˜๊ธฐ ์‰ฝ๊ณ  ์…ธ์—์„œ ๋นŒ๋“œ ๋Œ€์ƒ ์ด๋ฆ„์˜ ํƒญ ์™„์„ฑ์— ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. IMO๋Š” Ninja๊ฐ€ ๋งŒ๋“œ๋Š” ์ข‹์€ ๊ถŒ์žฅ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. Ninja๋Š” ์ด ๊ฒฝ์šฐ๋ฅผ ์กฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์กฐ๊ธˆ ๋” ๋งŽ์€ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ ์ด๊ฒƒ์ด ์ œ๊ฐ€ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@bradking ์ƒ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ํ•ญ์ƒ ์งง์€ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

build jsoncpp@sha/src_lib_json_json_reader.cpp.o: cpp_COMPILER ../../../../../Users/clausklein/Workspace/cpp/jsoncpp/src/lib_json/json_reader.cpp
 DEPFILE = jsoncpp@sha/src_lib_json_json_reader.cpp.o.d
 ARGS = -Ijsoncpp<strong i="7">@sha</strong> -I. -I../../../../../Users/clausklein/Workspace/cpp/jsoncpp -I../../../../../Users/clausklein/Workspace/cpp/jsoncpp/include -I../../../../../Users/clausklein/Workspace/cpp/jsoncpp/dir1 -I../../../../../Users/clausklein/Workspace/cpp/jsoncpp/dir2 -fdiagnostics-color=always -pipe -Wall -Winvalid-pch -Wnon-virtual-dtor -std=c++17 -O3

๋‚ด ์˜ˆ๋Š” https://github.com/ninja-build/ninja/issues/1251#issuecomment -597877775๊ฐ€ ๋” ์ข‹์•„ ๋ณด์ž…๋‹ˆ๋‹ค!

CMake์˜ ์ƒ์„ฑ๊ธฐ์—๋Š” ๋นŒ๋“œ ํŠธ๋ฆฌ๋ฅผ ๋– ๋‚˜๋Š” ../ ์‹œํ€€์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๊ทœ์น™์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์™„์ „ํžˆ ์†Œ์Šค ์™ธ๋ถ€ ๋นŒ๋“œ์—์„œ ์†Œ์Šค ํŠธ๋ฆฌ์— ๋Œ€ํ•œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ์™€ ๋นŒ๋“œ ํŠธ๋ฆฌ ๋‚ด ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ›„์ž๋Š” ๋นŒ๋“œ ํŠธ๋ฆฌ ์•„๋ž˜์— ์žˆ์œผ๋ฏ€๋กœ ../ ์—์„œ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•Œ๊ณ  ๋ณด๋‹ˆ _mesonbuild_ ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ;-)

ํ•˜์ง€๋งŒ ๊ทธ๋ณด๋‹ค ์†Œ์Šค ํŠธ๋ฆฌ๋กœ์˜ ์ƒ์„ฑ์„ ๊ฑฐ๋ถ€ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋Š” ์ƒ๋Œ€ ๊ฒฝ๋กœ์™€ ์ ˆ๋Œ€ ๊ฒฝ๋กœ์˜ ์žฅ์ ์— ๋Œ€ํ•ด ์˜์›ํžˆ ๋…ผ์Ÿํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹Œ์ž๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋…๋‹จ์ ์ด์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ๋‹จ์ผ ๋นŒ๋“œ ๋‚ด์—์„œ ๋‘˜ ๋‹ค ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋นŒ๋“œ ์‹œ์Šคํ…œ ์ƒ์„ฑ๊ธฐ๋Š” ๋„๊ตฌ๊ฐ€ ๊ฒฝ๋กœ๋กœ ์ˆ˜ํ–‰ํ•  ์ž‘์—…์„ ํ•ญ์ƒ ์ œ์–ดํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. Ninja๋Š” ๋™์ผํ•œ ํŒŒ์ผ์— ๋Œ€ํ•œ ํ˜ผํ•ฉ ์ ˆ๋Œ€/์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ง€์›ํ•ด์•ผ ํ•˜๋ฉฐ ๋‚ด ์ œ์•ˆ์„œ์— ์„ค๋ช…๋œ ๊ฐ„๋‹จํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™๊ธฐ ๋ถ€์—ฌ ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ depfile ๊ตฌ๋ฌธ ๋ถ„์„์œผ๋กœ ๊ฒฉ๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

Ninja๋Š” ๋™์ผํ•œ ํŒŒ์ผ์— ๋Œ€ํ•œ ํ˜ผํ•ฉ ์ ˆ๋Œ€/์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋™์˜ํ•œ๋‹ค!

๋ชจ๋“  ์„ค๋ช…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ดํ•ดํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

Ninja๊ฐ€ (depfile์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๋งŒ๋‚˜๋ฉด) cwd์™€ ์ฐพ์€ ๊ฒฝ๋กœ๋ฅผ ๋ชจ๋‘ ์‹ค์ œ ๊ฒฝ๋กœ๋กœ ์ง€์ •ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ๊ทธ๋Ÿฐ ๋‹ค์Œ ์‹ค์ œ ๊ฒฝ๋กœ๊ฐ€ ์ง€์ •๋œ depfile-path์—์„œ ์‹ค์ œ ๊ฒฝ๋กœ๊ฐ€ ์ง€์ •๋œ cwd๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์ƒ์„ฑ๋œ ํ—ค๋”์™€ ์ผ์น˜ํ•˜๋Š” ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ํšจ๊ณผ๊ฐ€ ์žˆ์„๊นŒ์š”?

getcwd() ๋Š” ํ•ญ์ƒ ์ด๋ฏธ ์‹ค์ œ ๊ฒฝ๋กœ์ด๋ฏ€๋กœ ํ•ด๋‹น ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Ninja๊ฐ€ realpath() ์ธ ๊ฒฝ์šฐ depfile์ด ์ œ๊ณตํ•œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ์™€ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š” cwd ์ ‘๋‘์‚ฌ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ realpath() ๋Š” ์•„๋งˆ๋„ ๊ฐ’๋น„์‹ผ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ธ ๋ฐ˜๋ฉด ์ œ์•ˆ๋œ ninja_workdir ์€ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ฒฝ๋กœ๋ฅผ ์ˆœ์ „ํžˆ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ฐฉํ–ฅ์˜ ํ˜ผํ•ฉ๋„ ํ—ˆ์šฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ์ด์ง€๋งŒ depfile์˜ ์ƒ๋Œ€ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” Ninja๊ฐ€ build.ninja ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๋™์•ˆ ๋ชจ๋“  ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ realpath() ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋งˆ ๋Š๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ:

getcwd(): /var/xyz/build
depfile ํ•ญ๋ชฉ: /home/foo/build/bar.h
์‹ค์ œ ๊ฒฝ๋กœ(depfile ํ•ญ๋ชฉ): /var/xyz/build/bar.h
์ƒ๋Œ€ ์‹ค์ œ ๊ฒฝ๋กœ: bar.h
depfile ํ•ญ๋ชฉ์—์„œ ์ œ๊ฑฐ: /home/foo/build -> ninja_workdir

์ด๋Ÿฐ ์‹์œผ๋กœ ์šฐ๋ฆฌ๋Š” realpath๋ฅผ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ninja_workdir ๋ฅผ ์ž๋™์œผ๋กœ ์œ ๋„ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์›๋ž˜ symlink๋ฅผ ํฌํ•จํ•˜๋Š” ๋…ผ๋ฆฌ์  ๊ฒฝ๋กœ์˜ ๋…ผ๋ฆฌ์  ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ workdir์— ํ•ด๋‹นํ•˜๋Š”์ง€ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์‹ค์ œ ๊ฒฝ๋กœ๊ฐ€ cwd์™€ ์ผ์น˜ํ•  ๋•Œ๊นŒ์ง€ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ•ดํ‚น ๋ฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒ๊ธด ์ฒซ ๋ฒˆ์งธ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์‹ ๋ขฐํ•˜๋Š” ๊ฒƒ์€ ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฐ ์‹์œผ๋กœ ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ๋งŒ๋‚˜๋Š” ๋ชจ๋“  ์ ˆ๋Œ€ ๊ฒฝ๋กœ์— ๋Œ€ํ•ด realpath()๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œ ์‹œ์Šคํ…œ ์ƒ์„ฑ๊ธฐ๋Š” build.ninja ์˜ ๋นŒ๋“œ ๋ฌธ ๋ฐ ๋ช…๋ น์ค„์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ–ˆ๋˜ workdir์— ๋Œ€ํ•œ ๋…ผ๋ฆฌ์  ๊ฒฝ๋กœ๋ฅผ ์ •ํ™•ํžˆ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฒƒ์€ workdir ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ๊ฐ€์žฅ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด ์†Œ์Šค์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ์ •๋ณด๋ฅผ Ninja์—๊ฒŒ ์ „๋‹ฌํ•  ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์ œ์•ˆํ•œ ninja_workdir ๋ฐ”์ธ๋”ฉ์ž…๋‹ˆ๋‹ค.

์ œ๊ฐ€ ์ดํ•ดํ–ˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ๊ฐ์ง€ ๋…ผ๋ฆฌ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋นŒ๋“œ ์‹œ์Šคํ…œ ์ƒ์„ฑ๊ธฐ๊ฐ€ ๋นŒ๋“œ ํŠธ๋ฆฌ ๋‚ด๋ถ€์— ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋„ฃ์œผ๋ฉด ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋นŒ๋“œ ํŠธ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ณณ์ด๋‚˜ ์™ธ๋ถ€๋ฅผ ๊ฐ€๋ฆฌํ‚ด).

getcwd(): /var/xyz/build
depfile ํ•ญ๋ชฉ: /home/foo/build/subdir-link/bar.h
์‹ค์ œ ๊ฒฝ๋กœ(depfile ํ•ญ๋ชฉ): /var/xyz/build/subdir-real/bar.h
์ƒ๋Œ€ ์‹ค์ œ ๊ฒฝ๋กœ: subdir-real/bar.h
depfile ํ•ญ๋ชฉ์—์„œ ์ œ๊ฑฐ: ???

CMake๋Š” ์ด๊ฒƒ์„ ํ•˜์ง€ ์•Š์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ๋นŒ๋“œ ์‹œ์Šคํ…œ ์ƒ์„ฑ๊ธฐ๋Š” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋”๋ผ๋„ ํƒ์ง€๋Š” ์—ฌ์ „ํžˆ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์— ์ง๋ฉดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

getcwd(): /var/xyz/build
1000๊ฐœ์˜ depfile ํ•ญ๋ชฉ: /home/foo/ext-lib/bar{1,2,...}.h
1000๊ฐœ์˜ ์‹ค์ œ ๊ฒฝ๋กœ(depfile ํ•ญ๋ชฉ): /var/xyz/ext-lib/bar{1,2,...}.h
1000 ์ƒ๋Œ€ ์‹ค์ œ ๊ฒฝ๋กœ: cwd ์•„๋ž˜์— ์—†์Œ

์ด์ œ ๊ทธ๊ฒƒ์ด 1000๊ฐœ์˜ ์†Œ์Šค์˜ depfile์— ๋‚˜ํƒ€๋‚˜๊ณ  ํžˆํŠธ๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ์ƒํ•ด๋ณด์‹ญ์‹œ์˜ค. ์ด๋Š” ์ด ํœด๋ฆฌ์Šคํ‹ฑ์— ๋Œ€ํ•œ ์ผ์น˜ ํ•ญ๋ชฉ์ด ์—†๋Š” 100๋งŒ ๊ฐœ์˜ realpath() ํ˜ธ์ถœ์ž…๋‹ˆ๋‹ค. ์†Œ์Šค๊ฐ€ ๋‹ค์‹œ ๋นŒ๋“œ๋˜๊ณ  ํ•ด๋‹น depfile์ด ๋‹ค์‹œ ๊ตฌ๋ฌธ ๋ถ„์„๋  ๋•Œ๋งˆ๋‹ค ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œ ํŠธ๋ฆฌ ๋‚ด๋ถ€์˜ symlink -> ์˜ˆ, ์‹ค์ œ๋กœ ์ง€์›ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋ชจ๋“  ๊ณณ์—์„œ ์‹ค์ œ ๊ฒฝ๋กœ ์ง€์ • ์—†์ด).

๋‘ ๋ฒˆ์งธ ์˜ˆ๋Š” ๋‹ค์†Œ ์ธ์œ„์ ์œผ๋กœ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ depfile์€ ์‹œ์Šคํ…œ ํ—ค๋”๊ฐ€ ์•„๋‹Œ ๋กœ์ปฌ ์ข…์†์„ฑ์œผ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์„ฑ๋Šฅ ๋ฌธ์ œ๋กœ ํŒ๋ช…๋˜๋ฉด .ninja_deps ์— workdir์„ ์บ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์†Œ์Šค ์™ธ๋ถ€ ๋นŒ๋“œ์—์„œ๋Š” ๋นŒ๋“œ ํŠธ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” depfile ํ•ญ๋ชฉ์ด ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋งค์šฐ ์ผ๋ฐ˜์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค:

getcwd(): /var/xyz/build
1000๊ฐœ์˜ depfile ํ•ญ๋ชฉ: /home/foo/project-source/bar{1,2,...}.h
1000๊ฐœ์˜ ์‹ค์ œ ๊ฒฝ๋กœ(depfile ํ•ญ๋ชฉ): /var/xyz/project-source/bar{1,2,...}.h
1000 ์ƒ๋Œ€ ์‹ค์ œ ๊ฒฝ๋กœ: cwd ์•„๋ž˜์— ์—†์Œ

Ninja๋Š” ๋งŒ์ผ์˜ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ์ด๋“ค ๋ชจ๋‘์— ๋Œ€ํ•ด realpath() ๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ์‹ค์ œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ผ์ข…์˜ ๊ฒฐ๊ณผ ํ…Œ์ด๋ธ”์„ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ cwd๋กœ ํ•ด์„๋˜๋Š” ์‹ฌ๋ณผ๋ฆญ ๋งํฌ ๊ฒฝ๋กœ๋ฅผ ๋งŒ๋‚  ๋•Œ๋ฅผ ๋ฏธ๋ฆฌ ์•Œ ์ˆ˜ ์—†์œผ๋ฉฐ ์ฐพ์„ ๊ฒƒ์ธ์ง€ ์กฐ์ฐจ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

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

๋‚ด ์˜ˆ์—์„œ ํ˜•์‹์˜ depfile์€ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋‚˜ ํ˜ผํ•ฉ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋„ ์ด๋ฏธ ๋งค์šฐ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋นŒ๋“œ ํŠธ๋ฆฌ์— ์žˆ์Šต๋‹ˆ๋‹ค. Ninja๋Š” ํœด๋ฆฌ์Šคํ‹ฑ์ด ํ•„์š”ํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฏธ๋ฆฌ ์•Œ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋งŒ์ผ์„ ๋Œ€๋น„ํ•˜์—ฌ realpath() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ฐจ๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋‹น์‹ ์˜ ์˜ˆ๋ฅผ ์ž˜๋ชป ์ดํ•ดํ–ˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. 3000๊ฐœ ํ•ญ๋ชฉ์ด ์žˆ๋Š” ํ•˜๋‚˜์˜ depfile์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ๊ฐ๊ฐ 1000๊ฐœ ํ•ญ๋ชฉ์ด ์žˆ๋Š” depfile์— ๋Œ€ํ•œ 3๊ฐœ์˜ ๊ฐœ๋ณ„ ์˜ˆ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

๋‚˜๋Š” 1000๊ฐœ์˜ depfile ํ•ญ๋ชฉ์ด ์—ฌ๋Ÿฌ depfile์— ๊ฑธ์ณ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ „์ฒด์— 10000๊ฐœ์˜ ํ•ญ๋ชฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ๊ฒฝ๋กœ๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ์•„๋ฌด ๊ณณ์ด๋‚˜ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‹ค์ œ๋กœ ๋นŒ๋“œ ํŠธ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜๋„ ์žˆ๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฝ๋กœ๊ฐ€ ํ˜ผํ•ฉ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•˜๋Š” CMakeLists.txt ์˜ ์˜ˆ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ(1000์ผ ํ•„์š”๋Š” ์—†๊ณ  ๊ฐ๊ฐ ํ•˜๋‚˜์”ฉ๋งŒ)?

CMake๋Š” ํ˜„์žฌ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๊ฒฝ๋กœ๊ฐ€ ํ˜ผํ•ฉ๋˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— CMakeLists.txt ํŒŒ์ผ์— ํ‘œ์‹œํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ CMake์˜ ๋ฌธ์ œ ์ถ”์ ๊ธฐ์—๋Š” Ninja๊ฐ€ ๋จผ์ € ํ•ด๊ฒฐํ•˜์ง€ ์•Š๊ณ ๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด CMake ๋ฌธ์ œ 13894 ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์‚ฌ์šฉ์ž๋Š” ๋นŒ๋“œ ํŠธ๋ฆฌ์˜ ์†Œ์Šค(๋ฐ ์•„๋งˆ๋„ ๋””๋ ‰ํ† ๋ฆฌ ํฌํ•จ)์— ๋Œ€ํ•ด ๋˜๋Š” ์†Œ์Šค ๋‚ด ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ์—๋„ ์ปดํŒŒ์ผ๋Ÿฌ์— ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ CMake์˜ Makefile ์ƒ์„ฑ๊ธฐ์™€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. Ninja๋กœ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด depfiles๋Š” ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ๋Œ์•„์˜ค๊ณ  build.ninja ์˜ ์ƒ๋Œ€ ๊ฒฝ๋กœ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•ด ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์—ฌ๊ธฐ์„œ ์œ„์—์„œ ๋…ผ์˜ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์šฐ๋ฆฌ๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ด๊ฒƒ์„ ์‹œ๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค https://github.com/ClausKlein/build-performance/commit/8013836486e3a459474eb374f6c3da5e20983443

์—ฌ๊ธฐ์— ํ‘œ์‹œ๋œ ๋ฌธ์ œ๋Š” https://github.com/ninja-build/ninja/issues/1251#issue -210080507์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
์›ํ•˜๋Š” ๋งŒํผ์˜ ํƒ€๊ฒŸ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ๊ฐ 2๊ฐœ์˜ ์†Œ์Šค ํŒŒ์ผ์ด ์žˆ๋Š” 2๋ช…์˜ ์ •๋ณต์ž:

PWD=/Users/clausklein/Workspace/build-performance/build

rule cp
  command = cp $in $out

rule cc
  depfile = $out.d
  deps = gcc
  command = gcc -c -I$PWD $IN -o $out $FLAGS -MMD -MT $out -MF $out.d

rule link
  command = gcc -o $out $in $LINK_PATH $LINK_LIBRARIES

build foo: phony foo.h
build foo.h: cp foo.h.in

build bin/main0.o: cc /Users/clausklein/Workspace/build-performance/build/subdir0/main.c || foo.h
  IN = /Users/clausklein/Workspace/build-performance/build/subdir0/main.c
build /Users/clausklein/Workspace/build-performance/build/subdir0/file0.o: cc /Users/clausklein/Workspace/build-performance/build/subdir0/file0.c || foo.h
  IN = /Users/clausklein/Workspace/build-performance/build/subdir0/file0.c

build bin/main1.o: cc /Users/clausklein/Workspace/build-performance/build/subdir1/main.c || foo.h
  IN = /Users/clausklein/Workspace/build-performance/build/subdir1/main.c
build /Users/clausklein/Workspace/build-performance/build/subdir1/file0.o: cc /Users/clausklein/Workspace/build-performance/build/subdir1/file0.c || foo.h
  IN = /Users/clausklein/Workspace/build-performance/build/subdir1/file0.c

build bin/main0: link bin/main0.o /Users/clausklein/Workspace/build-performance/build/subdir0/file0.o 
build bin/main1: link bin/main1.o /Users/clausklein/Workspace/build-performance/build/subdir1/file0.o 

build all: phony foo bin/main0 bin/main1 
default all

์ด๊ฒƒ์€ CMake์˜ Makefile ์ƒ์„ฑ๊ธฐ์™€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

Make๋Š” ์‹ฌ๋ณผ๋ฆญ ๋งํฌ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๊นŒ?

Make๋Š” ์‹ฌ๋ณผ๋ฆญ ๋งํฌ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๊นŒ?

Makefile ์ƒ์„ฑ๊ธฐ๋Š” ํ˜„์žฌ depfiles๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ž์ฒด์ ์œผ๋กœ ๋Œ€๋žต์ ์ธ ์Šค์บ”์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Makefile ์ƒ์„ฑ๊ธฐ์— C++20 ๋ชจ๋“ˆ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ผ๋ถ€๋กœ ์—…๋ฐ์ดํŠธ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ depfile ๊ฒฝ๋กœ์˜ ํ•ด์„์€ ์—ฌ๊ธฐ์— ์ œ์•ˆ๋œ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์กฐ์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ์˜ต์…˜์€ ์ง€๊ธˆ์€ ninja_workdir ์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  $ getcwd() ๊ฐ€ ๋งจ ์œ„์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ํ˜ผํ•ฉ ๊ฒฝ๋กœ๋ฅผ ์กฐ์ •ํ•˜๋„๋ก Ninja์—๊ฒŒ ์ตœ์†Œํ•œ ๊ฐ€๋ฅด์น˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ์ตœ์†Œํ•œ ํ˜ผํ•ฉ ๊ฒฝ๋กœ๋Š” ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ€ ์—†๋Š” ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์— ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‚˜์ค‘์— ๋” ๋ณต์žกํ•œ ๊ฒฝ์šฐ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ninja_workdir ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ์ฃผ์„ธ์š”. ์ด๊ฒƒ ๋•Œ๋ฌธ์— ๋„ˆ๋ฌด ์งœ์ฆ์ด ๋‚œ๋‹ค.

CMake ๋ฐ VSCode์™€ ํ•จ๊ป˜ ARM-GCC๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ์Šค ๋‚ด ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ฒฝ๋กœ๋Š” ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋Œ€์‹  "๋นŒ๋“œ" ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ƒ๋Œ€์ ์ด๋ฏ€๋กœ VSCode๊ฐ€ ๋” ์ด์ƒ ๊ฒฝ๋กœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ช…๋ น์ค„ ์ฐฝ์—์„œ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋Œ€์‹  ๊ฐ ํŒŒ์ผ์„ ์ง์ ‘ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. CMake ํŠธ๋ฆฌ ์™ธ๋ถ€ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Eclipse์˜ "IntelliSense"๊ฐ€ ์ค‘๋‹จ๋˜๊ณ  CMake ํ•˜์œ„ ํ”„๋กœ์ ํŠธ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋‚ด ์†”๋ฃจ์…˜์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— MakeFiles๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Ninja๊ฐ€ ๋” ๋‚ซ๊ณ  ๋” ์ฝ๊ธฐ ์‰ฌ์šด ํŒŒ์ผ(rules.ninja...)์„ ์ƒ์„ฑํ•˜๋ฉฐ ๋ช…๋ น์ค„์˜ ๋นŒ๋“œ ์ถœ๋ ฅ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค. Make๋Š” ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์ปจํ…์ŠคํŠธ์—์„œ ๋ช…๋ น์ค„์— ๊ฒฝ๊ณ ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์—ฌ๋Ÿฌ ๊ฒฝ๊ณ ๊ฐ€ ์ธํ„ฐ๋ฆฌ๋ธŒ๋ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ฒŒ ๋˜๋ฉฐ, ์ด๋Š” ๋‹ค์‹œ ๋งค์šฐ ์„ฑ๊ฐ€์‹  ์ผ์ž…๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ์ฃผ์„ธ์š”. ์ด๊ฒƒ ๋•Œ๋ฌธ์— ๋„ˆ๋ฌด ์งœ์ฆ์ด ๋‚œ๋‹ค.

CMake ๋ฐ VSCode์™€ ํ•จ๊ป˜ ARM-GCC๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ์Šค ๋‚ด ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ฒฝ๋กœ๋Š” "๋นŒ๋“œ" ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒ๋Œ€์ ์ž…๋‹ˆ๋‹ค...

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ์Šค ํŠธ๋ฆฌ ์™ธ๋ถ€์—์„œ ๋นŒ๋“œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค! ์ฆ‰ _$TMPDIR/..._

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

์ง€๊ธˆ ๋‚ด ์†”๋ฃจ์…˜์€ ํ•ญ์ƒ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก CMake๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ ์ด๊ฒƒ์— ๋Œ€ํ•œ ์˜ต์…˜์ด ์—†๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ด๊ฒƒ์„ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ CMake v3.18.1 ํŒจ์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@@ -241,7 +241,7 @@ void cmNinjaTargetGenerator::AddIncludeFlags(std::string& languageFlags,
   // Add include directory flags.
   std::string includeFlags = this->LocalGenerator->GetIncludeFlags(
     includes, this->GeneratorTarget, language,
-    language == "RC", // full include paths for RC needed by cmcldeps
+    true, // full include paths for RC needed by cmcldeps
     false, config);
   if (this->GetGlobalGenerator()->IsGCCOnWindows()) {
     std::replace(includeFlags.begin(), includeFlags.end(), '\\', '/');
@@ -1133,8 +1133,7 @@ void cmNinjaTargetGenerator::WriteObjectBuildStatement(
   const std::string& fileConfig, bool firstForConfig)
 {
   std::string const language = source->GetLanguage();
-  std::string const sourceFileName =
-    language == "RC" ? source->GetFullPath() : this->GetSourceFilePath(source);
+  std::string const sourceFileName = source->GetFullPath();
   std::string const objectDir = this->ConvertToNinjaPath(
     cmStrCat(this->GeneratorTarget->GetSupportDirectory(),
              this->GetGlobalGenerator()->ConfigDirectory(config)));

์ฃผ์˜ , cmake์— ๋Œ€ํ•œ ํŒจ์น˜๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ https://github.com/ninja-build/ninja/issues/1251 ์ฐธ์กฐ

๋‹Œ์ž ํŒจ์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค!

๋‚ด ๋งˆ์ง€๋ง‰ ์˜๊ฒฌ์—์„œ ์ƒ๋Œ€ ๊ฒฝ๋กœ ๋Œ€์‹  ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” CMake์šฉ ํŒจ์น˜๋ฅผ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Ninja์™€์˜ ์‚ฌ์šฉ์ž ์ง€์ • CMake ํ—ค๋” ์ข…์†์„ฑ์„ ๊นจ๊ธฐ ๋•Œ๋ฌธ์—(์˜ˆ๋ฅผ ๋“ค์–ด ์ƒ์„ฑ๋œ ํ—ค๋” ํŒŒ์ผ์ด .json ํŒŒ์ผ์— ์ข…์†๋˜๊ธฐ ๋•Œ๋ฌธ์—) ์ด๊ฒƒ์€ ๋‚˜์œ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์—ฌ๊ธฐ ์ด ๋ฌธ์ œ์—์„œ ํŒŒ์ƒ๋œ ๊ฒƒ ๊ฐ™์•„์š”. ์ œ๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ฆฌ์„์–ด์„œ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€ ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ์ด์ œ ์ƒ๋Œ€ ๊ฒฝ๋กœ์™€ ํ•จ๊ป˜ Ninja๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ†ตํ•ฉ ํ„ฐ๋ฏธ๋„ ๋‚ด๋ถ€์˜ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ํด๋ฆญํ•  ์ˆ˜ ์žˆ๋„๋ก VSCode์šฉ ํ™•์žฅ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ํ™•๋Œ€

@GrandChris ๋Œ€๋‹จํ•ด! Output ํƒญ์—์„œ๋„ ์ž‘๋™ํ•˜๊ฒŒ ํ•  ๊ธฐํšŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@weliveindetail ์ž์œ ๋กญ๊ฒŒ https://github.com/GrandChris/TerminalRelativePath/issues ์—์„œ ์ƒˆ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์„ธ์š”. ๊ทธ๋Ÿฌ๋‚˜ VSCode์˜ ์ถœ๋ ฅ ํƒญ์€ ํ†ตํ•ฉ ํ„ฐ๋ฏธ๋„๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋ฉฐ ์ด์™€ ๊ด€๋ จํ•˜์—ฌ ๋™์ž‘์„ ํ™•์žฅํ•˜๋Š” API๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•Œ์•˜์–ด ๊ณ ๋งˆ์›Œ. ๊ฒฐ๊ตญ ํด๋ฆญ ๊ฐ€๋Šฅํ•œ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋Š” VSCode ๋˜๋Š” CMake ํ™•์žฅ์—์„œ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ํŽธ์— ํ•‘์„ ๋Œˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์ด๊ฒƒ์€ CMake Issue 21865 ์—์„œ ๋‹ค์‹œ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ด๋Š” depfile์—์„œ ๋ฐœ๊ฒฌ๋œ ์ข…์†์„ฑ์ด build.ninja ์™€ ์ •ํ™•ํžˆ ๋™์ผํ•œ ๊ฒฝ๋กœ ํ‘œํ˜„์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ์ง€ ์•Š์€(๊ฐ€๋Šฅํ•œ๊ฐ€์š”?) ๊ฒฝ์šฐ์˜ ๋˜ ๋‹ค๋ฅธ ์˜ˆ์ž…๋‹ˆ๋‹ค.

1917์€ ์œ„์—์„œ ์ œ์•ˆํ•œ ninja_workdir ๋ฐ”์ธ๋”ฉ์„ ์ž์ฒด์ ์œผ๋กœ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์œผ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋ณ‘ํ•ฉ๋˜๋ฉด ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์„ ํ›„์† ์กฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@jhasse ์ด ๊ณ ์ •๋œ ์—…์ŠคํŠธ๋ฆผ์„ ์–ป๊ธฐ ์œ„ํ•ด ์ˆ˜์šฉ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์„ ์ œ์‹œํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ninja_workdir ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์œ„์—์„œ ๋‚˜์˜ ๊ฒฝ์šฐ๋ฅผ ์ฃผ์žฅํ–ˆ๋‹ค. ๋‹ค๋ฅธ ์–ด๋–ค ๋Œ€์•ˆ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๊นŒ?

๋‹น์‹ ์ด ์ง€์ ํ–ˆ๋“ฏ์ด ๋ฌธ์ œ(depfile ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์ƒ๋Œ€ ๊ฒฝ๋กœ์™€ ํ˜ผํ•ฉํ•˜๋ฉด ๋‹ค์‹œ ๋นŒ๋“œ๊ฐ€ ์ค‘๋‹จ๋จ)๋Š” ์˜๋„์ ์œผ๋กœ ์„ค๊ณ„๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋…ผ์˜์—์„œ ์—ฌ๋Ÿฌ ๋ฌธ์ œ(์˜ˆ: ๋นŒ๋“œ ๋””๋ ‰ํ† ๋ฆฌ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ)๋ฅผ ๋‹ค๋ฃจ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณด๋‹ค ๊ตฌ์ฒด์ ์ธ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ดˆ๊ธฐ ์ฃผ์„์˜ ๋‘ ๊ฐ€์ง€ ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ ๋Œ€์•ˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด IDE๊ฐ€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์™€ ์ผ์น˜ํ•˜๊ณ  ์›๋ณธ ํŒŒ์ผ์„ ๋‹ค์‹œ ์ฐธ์กฐํ•˜๋„๋ก ๋” ๋‚˜์€ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

IDE๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ /FC ๋˜๋Š” -fabs-path-diagnostics ๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๋””๋ฒ„๊ทธ ์ •๋ณด์— ๊ธฐ๋ก๋œ ๊ฒฝ๋กœ์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋˜ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์ˆ˜์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. -fdebug-prefix-map ๋ฅผ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์ •ํ™•ํžˆ ๋ฌด์—‡์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. ninja-bug.bash.txt

์‹ค์ œ๋กœ๋Š” Ninja์˜ ํ˜„์žฌ ํ–‰๋™์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ

  1. "๋‚ด IDE๊ฐ€ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์ถœ๋ ฅ์„ ์˜ฌ๋ฐ”๋ฅธ ํŒŒ์ผ๊ณผ ์ผ์น˜์‹œํ‚ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"
  2. "๋””๋ฒ„๊ทธ ์ •๋ณด์— ์ ˆ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค"

์ถ”๊ฐ€ ์„ค๋ช…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ XY ๋ฌธ์ œ ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค(X๋Š” "์ ˆ๋Œ€ ๋ฐ ์ƒ๋Œ€ ๊ฒฝ๋กœ ํ˜ผํ•ฉ"์ด๊ณ  Y๋Š” 1 ๋˜๋Š” 2์ž„).

์†”๋ฃจ์…˜์ด "๋‹ค๋ฅธ ๋ชจ๋“  ๋„๊ตฌ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ"ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

1924๋Š” ninja_workdir ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐœ์ „๊ธฐ๋Š” ์œ„์˜ ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ๋“ค์„ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ GNU gcc ์˜ต์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค!

์˜ค์ „ 05.03.2021 ์Œ 16:58 schrieb Jan Niklas Hasse [email protected] :

IDE๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ /FC https://docs.microsoft.com/de-de/cpp/build/reference/fc-full-path-of-source-code-file-in-diagnostics ๋˜๋Š” -fabs-๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๊ฒฝ๋กœ ์ง„๋‹จ https://reviews.llvm.org/D23816 ์ปดํŒŒ์ผ๋Ÿฌ์—.

๋””๋ฒ„๊ทธ ์ •๋ณด์— ๊ธฐ๋ก๋œ ๊ฒฝ๋กœ์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. ninja-bug.bash.txt

์‹ค์ œ๋กœ๋Š” Ninja์˜ ํ˜„์žฌ ํ–‰๋™์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

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

๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ ... (1) ... (2) ... ์ถ”๊ฐ€ ์„ค๋ช…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ๋“ค์€
๋„๊ตฌ์— ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ ˆ๋Œ€๊ฒฝ๋กœ๋Š” ๋ฌด๋ฆฌํ•˜์ง€ ์•Š๋‹ค
๊ทธ๋Ÿฌํ•œ ํŠน์ • ์‚ฌ๋ก€์—์„œ ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
๋ฌธ์ œ(์ผ๋ถ€ ๊ณต๊ธ‰์—…์ฒด์—์„œ ์ œ๊ณตํ•˜๋Š” ํŠน์ • ๋„๊ตฌ ๊ธฐ๋Šฅ ์‚ฌ์šฉ).
์ ˆ๋Œ€ ๊ฒฝ๋กœ๋Š” ์—…๋ฐ์ดํŠธ ์—†์ด ์ด๋Ÿฌํ•œ ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
๋‚˜๋จธ์ง€ ์ƒํƒœ๊ณ„์—. ๋‚ด๊ฐ€ ์ด์ „์— ๊ฒŒ์‹œํ•œ ๋ฐ”์™€ ๊ฐ™์ด:

์šฐ๋ฆฌ๋Š” ์ƒ๋Œ€ ๊ฒฝ๋กœ์™€ ์ ˆ๋Œ€ ๊ฒฝ๋กœ์˜ ์žฅ์ ์— ๋Œ€ํ•ด ์˜์›ํžˆ ๋…ผ์Ÿํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹Œ์ž๋Š”
๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์˜๊ฒฌ์„ ๊ฐ€์ง€์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋‘˜ ๋‹ค ๋‹จ์ผ ๋นŒ๋“œ ๋‚ด์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ ์‹œ์Šคํ…œ ์ƒ์„ฑ๊ธฐ๋Š” ํ•ญ์ƒ
๋„๊ตฌ๊ฐ€ ๊ฒฝ๋กœ๋กœ ์ˆ˜ํ–‰ํ•  ์ž‘์—…์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

๋ณต์žกํ•œ ์‹ค์ œ ๋นŒ๋“œ ์‹œ์Šคํ…œ์—๋Š” ์ž„์˜์˜ ์ˆ˜์˜ ๋ ˆ์ด์–ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
(๋ชจ๋“  ์ข…๋ฅ˜์˜ ๊ณต๊ธ‰์—…์ฒด์—์„œ) ์Šคํฌ๋ฆฝํŠธ, ๋ž˜ํผ, ๋„๊ตฌ ๋“ฑ
๋นŒ๋“œ ํŒŒ์ผ ์ƒ์„ฑ๊ธฐ์— ์˜ํ•ด build.ninja ๋กœ ์ž‘์„ฑ๋œ ๊ฒฝ๋กœ์™€ ์‹ค์ œ ๊ฒฝ๋กœ
depfile์—์„œ Ninja๊ฐ€ ๋งŒ๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋•Œ๋•Œ๋กœ ์ฃผ์–ด์ง„ ํŒŒ์ผ์€ ๋‹ค์Œ์—์„œ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
build.ninja ์—์„œ ๊ฒฝ๋กœ๊ฐ€ ์ง์ ‘ ์ง€์ •๋˜์ง€ ์•Š์€ ๋„๊ตฌ์˜ depfile.
Ninja์˜ ํ˜„์žฌ ๋””์ž์ธ์—์„œ depfile์ด ์ž‘๋™ํ•˜๋ ค๋ฉด ์ „์ฒด ๋„๊ตฌ๊ฐ€
์Šคํƒ์€ build.ninja ์ƒ์„ฑ๊ธฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„ํ•˜๋„๋ก ์„ ํƒํ•˜๋Š”์ง€ ์ •ํ™•ํžˆ ์•Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋นŒ๋“œ ๋ฌธ์˜ ํ•ด๋‹น ๊ฒฝ๋กœ ๋ฐ ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•˜๊ฑฐ๋‚˜ ๋ณ€ํ™˜
๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ทธ๋“ค์„. ์ด๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฃจ๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

Ninja๋Š” ์ž‘์€ ๋””์ž์ธ ๋ณ€๊ฒฝ์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
build.ninja ์˜ ์ƒ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š” depfile์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ(๋ฐ ๊ทธ ๋ฐ˜๋Œ€
๋ฐ˜๋Œ€๋กœ). ๋™์ผํ•œ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ž„์˜์˜ ๊ฒฝ๋กœ๋ฅผ ์กฐ์ •ํ•˜๋„๋ก ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ
depfile์˜ /path/to/some/file ๊ฐ€ some/file์˜ some/file ์™€ ๋™์ผํ•จ์„ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค.
๋นŒ๋“œ ํŒŒ์ผ /path/to/build.ninja .

์ด๋Ÿฌํ•œ ๋””์ž์ธ ์—…๋ฐ์ดํŠธ์— ๋Œ€ํ•œ ์„ ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹Œ์ž๊ฐ€ ์ฒ˜์Œ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ํฌ๋ง์€
๊ฒฝ๋กœ๋Š” ํ•ญ์ƒ ์ •ํ™•ํžˆ ๊ฐ™์€ ์œ„์น˜์—์„œ ninja ์— ์˜ํ•ด ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋นŒ๋“œ ํŒŒ์ผ ์ƒ์„ฑ๊ธฐ๊ฐ€ ์ž‘์„ฑํ•œ ๋ฐ”์ดํŠธ ๋‹จ์œ„ ํ‘œํ˜„
build.ninja . git blame -M -C -w -- src/util.cc ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ธฐ๋ก์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
CanonicalizePath ์ค‘ ๋ฐœ์ƒํ•œ ์ผ๋ จ์˜ ์‚ฌ๋ก€๋ฅผ ๋ณด๋ ค๋ฉด
๋””์ž์ธ ์ฒ ํ•™์€ ์—ฌ์œ ๋กœ์›Œ์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ทธ๋Ÿฌํ•œ ๊ฒฝ์šฐ์˜ ๋˜ ๋‹ค๋ฅธ ๋ถ€๋ฅ˜์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ๋‚ด๊ฐ€ ๋™์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค

๋‹Œ์ž๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋…๋‹จ์ ์ด์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

์ฒ˜์Œ์—๋Š”.

์ด๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฃจ๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๊ตฌ์ฒด์ ์ธ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์•ฝ๊ฐ„ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” "๋‹Œ์ž๊ฐ€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋…๋‹จ์ ์ด์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค"๋Š” ๋ง์— ์• ์ดˆ์— ๋™์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค....๊ทธ๋ž˜์„œ ๊ตฌ์ฒด์ ์ธ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ธ๊ฐ€?

์ด๊ฒƒ์€ ํŠน์ • ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ „์ฒด ๋ฌธ์ œ ํด๋ž˜์Šค ์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ๋„๊ตฌ์— ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ „๋‹ฌํ•˜๋ ค๋Š” ์ด์œ  ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ ํŠน์ • ๊ฒฝ์šฐ์— ์ ์šฉ๋˜๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ด๋“  ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. ๋นŒ๋“œ ์‹œ์Šคํ…œ์€ ์ •์ฑ…์„ ์ง€์‹œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. Ninja๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ์šฉ ์–ด์…ˆ๋ธ”๋ฆฌ ์–ธ์–ด๋กœ ๋˜์–ด ์žˆ์ง€๋งŒ ํ˜ผํ•ฉ ์Šคํƒ€์ผ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ํ‘œํ˜„ํ•  ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค.

์—…์ŠคํŠธ๋ฆผ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ Ninja์˜ ์ •์ฑ… ์€ ํšจ์œจ์„ฑ ์†์‹ค ์—†์ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ Ninja ์—…์ŠคํŠธ๋ฆผ์ด ์•„๋‹ˆ๋ผ ๋นŒ๋“œ ํŒŒ์ผ ์ƒ์„ฑ๊ธฐ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋นŒ๋“œ ํŒŒ์ผ ์ƒ์„ฑ๊ธฐ์—์„œ depfile ๊ฒฝ๋กœ์˜ ๋ฒ”์šฉ ninja_workdir ์Šคํƒ€์ผ ์กฐ์ •์„ ์ œ๊ณตํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ depfile์„ ์ƒ์„ฑํ•˜๋Š” ๋ชจ๋“  ๋ช…๋ น ๋‹ค์Œ์— depfile์˜ ๊ฒฝ๋กœ๋ฅผ ์ผ์น˜ํ•˜๋„๋ก ์ˆ˜์ •ํ•˜๋Š” ์ถ”๊ฐ€ ๋ช…๋ น์„ ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹Œ์ž๊ฐ€ ๋กœ๋“œํ•˜๊ธฐ ์ „์— ๋นŒ๋“œ ํŒŒ์ผ. ์ด ์ถ”๊ฐ€ ๋ช…๋ น์€ #1924๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋†’์€ ์ž์ฒด ๋Ÿฐํƒ€์ž„ ๋น„์šฉ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค( ninja ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์ ์€ ์ˆ˜์˜ ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ์กฐํšŒ). ๋”ฐ๋ผ์„œ ๋ฒ”์šฉ ์กฐ์ •์€ Ninja ์—…์ŠคํŠธ๋ฆผ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ด๋ฉฐ ํฌํ•จ ํ›„๋ณด์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

์ ˆ๋Œ€ ๊ฒฝ๋กœ์™€ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ํ˜ผํ•ฉํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ๊ฒƒ์— ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์„ฑ๊ฐ€์‹  ์ธ์ฒด ๊ณตํ•™ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ninja ์— ๊ฐ€์งœ ๋Œ€์ƒ์ด ์•„๋‹Œ ํŠน์ • ์ถœ๋ ฅ ํŒŒ์ผ์„ ์žฌ์ƒ์„ฑํ•˜๋„๋ก ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ(์˜ˆ: ninja out/my_executable ๋˜๋Š” ninja out/foo/bar.o ) ์ ˆ๋Œ€ ๊ฒฝ๋กœ ๋˜๋Š” ninja๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•จ์„ ๊ธฐ์–ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ˜ผ๋ž€์Šค๋Ÿฌ์šด "์•Œ ์ˆ˜ ์—†๋Š” ๋Œ€์ƒ" ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€ ๋ฌธ์ œ๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. build.ninja ํŒŒ์ผ์ด ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹Œ์ž์—๊ฒŒ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋„๋ก ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ํ•œ Ninja ์ƒ์„ฑ๊ธฐ ๋„๊ตฌ์—์„œ ๋ชจ๋“  ๋‹จ์ผ build ๋ฌธ์— ์ƒ๋Œ€ ๊ฒฝ๋กœ์™€ ํ•ด๋‹น ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ถœ๋ ฅ์œผ๋กœ ํฌํ•จํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜์ง€๋งŒ Ninja์˜ ํ•œ๊ณ„๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ•ดํ‚น์ฒ˜๋Ÿผ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค. (ํŽธ์ง‘: ๋˜ํ•œ build.ninja๊ฐ€ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋งŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋‹ค๋ฅธ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•œ ํ›„์—๋„ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ๋ณ„์นญ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.)

๋ถ„๋ช…ํžˆ ์ด๊ฒƒ์€ depfiles์™€ ์ •ํ™•ํžˆ ๊ฐ™์€ ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์ง€๋งŒ Ninja๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ ˆ๋Œ€ ๊ฒฝ๋กœ์™€ ์ƒ๋Œ€ ๊ฒฝ๋กœ ๋™๋“ฑ์„ฑ์— ๋Œ€ํ•ด ๋” ์ž˜ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•จ์„ ์‹œ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@comex ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํƒ€๋‹นํ•œ ์šฐ๋ ค์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์—ด โ€‹โ€‹์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐœ๋ฐœ์ž๊ฐ€ ๋„๊ตฌ์— ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ „๋‹ฌํ•˜๋ ค๋Š” ์ด์œ ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. [...]

๋‚˜๋Š” ๋™์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ด ๊ฒฝ์šฐ ๋ฒ”์šฉ ninja_workdir - ์Šคํƒ€์ผ์˜ depfile ๊ฒฝ๋กœ ์กฐ์ •์„ ์ œ๊ณตํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ [...]

๊ทธ๋Ÿฐ๋ฐ ์™œ ์ฒ˜์Œ์—๋Š” ninja_workdir -์Šคํƒ€์ผ ํ™”ํ•ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

์ฒ˜์Œ์— ninja_workdir ์Šคํƒ€์ผ ์กฐ์ •์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ฐœ๋ฐœ์ž๋Š” build.ninja ์—์„œ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ œ์–ดํ•˜์ง€ ์•Š๋Š” ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ depfile์—์„œ ์ƒ์„ฑ๋œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๊ณ„์† ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹Œ์ž์˜ ์„ค๊ณ„์ƒ ์ œํ•œ๊ณผ ํ•จ๊ป˜ ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋ฅผ ์ˆ˜์šฉํ•˜๊ธฐ ์œ„ํ•ด build.ninja ์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ œ์•ˆ์€ ์ƒ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ์„ ๊ธˆ์ง€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋” ๋งŽ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ninja_workdir ๋ฐ”์ธ๋”ฉ ์—†์ด #1924์™€ ๋™์ผํ•œ ์กฐ์ •์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด #1925๋ฅผ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” depfile ๊ฒฝ๋กœ๋ฅผ ์กฐ์ •ํ•˜๊ธฐ๋กœ ํ•œ ๊ฒฐ์ •๊ณผ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ€ ์žˆ๋Š” ๋…ผ๋ฆฌ์  workdir ๊ฒฝ๋กœ๋ฅผ ์ง€์›ํ•˜๊ธฐ๋กœ ํ•œ ๊ฒฐ์ •์„ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

[...] ์ œ์–ดํ•˜์ง€ ์•Š๋Š” ๋„๊ตฌ์— ์˜ํ•ด depfile์—์„œ ์ƒ์„ฑ๋œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ.

๊ทธ๋Ÿฌํ•œ ๋„๊ตฌ์— ๋Œ€ํ•œ ์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋Š” ์ „ ์„ธ๊ณ„ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๋„๊ตฌ์˜ ๋™์ž‘์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๋„๊ตฌ์˜ ๊ฒฝ์šฐ์—๋„ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋กœ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋„๊ตฌ๋ณ„ ์˜ต์…˜๊ณผ ์ƒ๋‹นํ•œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ์ด๋ฏธ ๋…ผ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. CMake๋Š” ๋น„์Šทํ•œ ์ด์œ ๋กœ ์—ฌ๋Ÿฌ ๊ฒฝ์šฐ์— ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ์ƒ์„ฑ๊ธฐ๊ฐ€ ํ•˜๋Š” ๋™์•ˆ Ninja ์ƒ์„ฑ๊ธฐ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์˜์กด์„ฑ ๋ฌธ์ œ๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐ ๋ช‡ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ–ˆ๋Š”๋ฐ, ์ด๊ฒƒ์ด ๋นŒ๋“œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๊ฒฝ๋กœ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” depfile ๊ฒฝ๋กœ์˜ ๋˜ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋„๊ตฌ๋Š” Ninja๊ฐ€ ์ข…์†์„ฑ์„ ์บก์ฒ˜ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ Ninja๋Š” ์ด๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

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

๋‚ด ์ œ์•ˆ์€ Ninja์— ์†Œ๋Ÿ‰์˜ ์ธํ”„๋ผ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ฌด์—‡์„ ์•„ํ”„๊ฒŒํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์œผ๋ฉด ํ›จ์”ฌ ๋” ํฐ ๋น„์šฉ์„ ์™ธ๋ถ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.

์‘ ๊ทธ๊ฒƒ์€ ์‚ฌ์‹ค์ด์•ผ!

๊ทธ๋ฆฌ๊ณ  ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ cmake๋Š” ์ค‘๋ณต ์ปดํŒŒ์ผ๋Ÿฌ ํฌํ•จ ๊ฒฝ๋กœ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋นŒ๋“œ ์‹œ๊ฐ„์ด ๋‹ค์‹œ ๋‹จ์ถ•๋ฉ๋‹ˆ๋‹ค.

์˜ค์ „ 09.03.2021 ์Œ 19:20 schrieb Brad King [email protected] :

์ƒ๋Œ€๊ฒฝ๋กœ๋ฅผ ๋ณต์Œํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋นŒ๋“œํˆด์˜ ์ž๋ฆฌ๊ฐ€ ์•„๋‹Œ๊ฐ€ ์‹ถ์Šต๋‹ˆ๋‹ค.

Qt์˜ Quick ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ cpp ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  Unity ๋นŒ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด์„œ ์ง๋ฉดํ•œ ๋ฌธ์ œ์™€ ๊ด€๋ จํ•˜์—ฌ CMake ๋ฌธ์ œ๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ง€์—ญ ์กฐ์‚ฌ์— ๋”ฐ๋ฅด๋ฉด ๋‹Œ์ž๊ฐ€ ํ›จ์”ฌ ๋น ๋ฅธ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด์ง€๋งŒ ์ด ๋ณ„์ž๋ฆฌ์—์„œ๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ๊ฑฐ๋‚˜ ๋นŒ๋“œ ์‹œ๊ฐ„ ์ฆ๊ฐ€๋ฅผ ์ •๋‹นํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

CMake๋Š” ์ตœ๊ทผ๊นŒ์ง€ ์ด Ninja ๋ฌธ์ œ๋กœ ๊ฐ€๋ ค์กŒ๋˜ ์ˆœํ™˜ ์ข…์†์„ฑ ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค . ์ด ๋ฌธ์ œ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ๋‹ค๋ฉด CMake ๋ฌธ์ œ๋ฅผ ํ›จ์”ฌ ๋” ๋นจ๋ฆฌ ๋ฐœ๊ฒฌํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰