๋์ ๋งค๋ด์ผ์ ์ด๋ฌํ ํผํฉ์ ๋ํด ๊ฒฝ๊ณ ํ์ง๋ง ์ฌ๊ฐํ ์ ํ ์ฌํญ์ด๋์์ต๋๋ค.
๋ฌธ์ ๋ ์ฌ๋๋ค์ด ๋น๋ ์์คํ ์ด ์์ค ํ์ผ์ ๋ํ ์ ๋ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํ์ผ๋ฌ๋ฅผ ํธ์ถํ๊ธฐ๋ฅผ ์ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด IDE๊ฐ ์ค๋ฅ ๋ฉ์์ง์ ์ผ์นํ๊ณ ์๋ณธ ํ์ผ์ ๋ค์ ์ฐธ์กฐํ๋๋ก ๋ ๋์ ์ถ๋ ฅ์ ์์ฑํฉ๋๋ค. ๋๋ฒ๊ทธ ์ ๋ณด์ ๊ธฐ๋ก๋ ๊ฒฝ๋ก์๋ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๋น๋ ๋งค๋ํ์คํธ์ ์๋ ๊ฒฝ๋ก์ ๋ํ ๋์์ ๊ธฐ๋ณธ ์ค์ ๊ณผ ์ถฉ๋ํฉ๋๋ค.
๋ค์์ ๋ฌธ์ ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์คํฌ๋ฆฝํธ์ ๋๋ค. ninja-bug.bash.txt
์ฐธ์กฐ: @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๊ฐ์ ์ฐ๊ฒฐ๋ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
2๊ฐ์ง ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํฉ๋๋ค.
build.ninja
$p
๋ฐ $o
์ ๋์ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฒ์ 2๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ญ์์ค. ์ ๊ฒฝ์ฐ์๋ $p
๋ฐ $o
๊ฐ ์ ๋์ ์ด์ง ์๊ณ build.ninja
์์ฑ๊ธฐ๊ฐ ์คํ๋ ํ์ฌ ๋๋ ํ ๋ฆฌ์์ ์๋์ ์
๋๋ค.์ฐธ๊ณ ๋ก ์ ๋ ์ ์๋ ์๋ฃจ์
์ผ๋ก 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
์ ์ ํํ ๋์ผํ ๊ฒฝ๋ก ํํ์ ์ฌ์ฉํ๋๋ก ํ๋ ๊ฒ์ด ์ฝ์ง ์์(๊ฐ๋ฅํ๊ฐ์?) ๊ฒฝ์ฐ์ ๋ ๋ค๋ฅธ ์์
๋๋ค.
ninja_workdir
๋ฐ์ธ๋ฉ์ ์์ฒด์ ์ผ๋ก ์ ์ฉํ ๊ธฐ๋ฅ์ผ๋ก ์ถ๊ฐํฉ๋๋ค. ๋ณํฉ๋๋ฉด ์ด ๋ฌธ์ ์ ๋ํ ์์ ์ฌํญ์ ํ์ ์กฐ์นํ ์ ์์ต๋๋ค.@jhasse ์ด ๊ณ ์ ๋ ์
์คํธ๋ฆผ์ ์ป๊ธฐ ์ํด ์์ฉ ๊ฐ๋ฅํ ์๋ฃจ์
์ ์ ์ํ๊ณ ์ถ์ต๋๋ค. ninja_workdir
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ๋๋ ์์์ ๋์ ๊ฒฝ์ฐ๋ฅผ ์ฃผ์ฅํ๋ค. ๋ค๋ฅธ ์ด๋ค ๋์์ ์ ์ํฉ๋๊น?
๋น์ ์ด ์ง์ ํ๋ฏ์ด ๋ฌธ์ (depfile ์ ๋ ๊ฒฝ๋ก๋ฅผ ๋งค๋ํ์คํธ ์๋ ๊ฒฝ๋ก์ ํผํฉํ๋ฉด ๋ค์ ๋น๋๊ฐ ์ค๋จ๋จ)๋ ์๋์ ์ผ๋ก ์ค๊ณ๋ ๊ฒ์ ๋๋ค. ๋ ผ์์์ ์ฌ๋ฌ ๋ฌธ์ (์: ๋น๋ ๋๋ ํ ๋ฆฌ ์ฌ๋ณผ๋ฆญ ๋งํฌ)๋ฅผ ๋ค๋ฃจ์๊ธฐ ๋๋ฌธ์ ๋ณด๋ค ๊ตฌ์ฒด์ ์ธ ๋ฌธ์ ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด๊ธฐ ์ฃผ์์ ๋ ๊ฐ์ง ์ฌ์ฉ ์ฌ๋ก์ ๊ฒฝ์ฐ ๋์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด IDE๊ฐ ์ค๋ฅ ๋ฉ์์ง์ ์ผ์นํ๊ณ ์๋ณธ ํ์ผ์ ๋ค์ ์ฐธ์กฐํ๋๋ก ๋ ๋์ ์ถ๋ ฅ์ ์์ฑํฉ๋๋ค.
IDE๋ฅผ ์์ ํ๊ฑฐ๋ /FC
๋๋ -fabs-path-diagnostics
๋ฅผ ์ปดํ์ผ๋ฌ์ ์ ๋ฌํฉ๋๋ค.
๋๋ฒ๊ทธ ์ ๋ณด์ ๊ธฐ๋ก๋ ๊ฒฝ๋ก์๋ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
์ด๊ฒ์ ๋ํ ์ปดํ์ผ๋ฌ์ ์ํด ์์ ๋์ด์ผ ํฉ๋๋ค. -fdebug-prefix-map
๋ฅผ ์ดํด๋ณด๋ ๊ฒ์ด ์ข๊ฒ ์ง๋ง ๋ฌธ์ ๊ฐ ์ ํํ ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋ค์์ ๋ฌธ์ ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์คํฌ๋ฆฝํธ์ ๋๋ค. ninja-bug.bash.txt
์ค์ ๋ก๋ Ninja์ ํ์ฌ ํ๋์ ๋ณด์ฌ์ค๋๋ค. ๋ ๊ฐ์ง ๋ฌธ์
์ถ๊ฐ ์ค๋ช ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ด๊ฒ์ ๋์๊ฒ XY ๋ฌธ์ ์ฒ๋ผ ๋ณด์ ๋๋ค(X๋ "์ ๋ ๋ฐ ์๋ ๊ฒฝ๋ก ํผํฉ"์ด๊ณ Y๋ 1 ๋๋ 2์).
์๋ฃจ์ ์ด "๋ค๋ฅธ ๋ชจ๋ ๋๊ตฌ์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐ"ํด์ผ ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
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 ๋ฌธ์ ๋ฅผ ํจ์ฌ ๋ ๋นจ๋ฆฌ ๋ฐ๊ฒฌํ์ ๊ฒ์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ฃจ์ ์ด "๋ค๋ฅธ ๋ชจ๋ ๋๊ตฌ์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐ"ํด์ผ ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
1924๋
ninja_workdir
์ ๊ทผ ๋ฐฉ์์ ๊ธฐ๋ฐ์ผ๋ก ํ ์คํธ๋ฅผ ํตํด ์๋ฒฝํ๊ฒ ์๋ํ๋ ์์ ์ฌํญ์ ๋ณด์ฌ์ค๋๋ค. ์ด๊ฒ์ ์ฌ์ฉํ๋ ๋ฐ์ ๊ธฐ๋ ์์ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.