Godot: ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ Meson ๋˜๋Š” ๋‹ค๋ฅธ ๋นŒ๋“œ ์‹œ์Šคํ…œ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

์— ๋งŒ๋“  2018๋…„ 01์›” 24์ผ  ยท  142์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: godotengine/godot

๋ฉ”์Šจ์˜ ์›น์‚ฌ์ดํŠธ

๋‚˜๋Š” ์ด๊ฒƒ์ด ์•ฝ๊ฐ„์˜ ๋œจ๊ฑฐ์šด ์ฃผ์ œ์ด๊ฑฐ๋‚˜ ์ ์–ด๋„ " ์•„๋ฌด๋„ ์‹ค์ œ๋กœ ๊ทธ๊ฒƒ์„ ํ•˜๊ณ  ์‹ถ์–ดํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ฌด๋„ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ํ† ๋ก ํ•˜๊ณ  ์‹ถ์–ดํ•˜์ง€ ์•Š๋Š”๋‹ค "๋Š” ์ฃผ์ œ๋ผ๋Š”

๊ทธ๋ž˜์„œ ํ˜„์žฌ Godot๋Š” SCons๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ €๋Š” ๊ทธ๊ฒƒ์ด ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด๊ณ (๊ธฐ๋ณธ์ ์œผ๋กœ Python์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—) Godot์—์„œ ์„ค์ •ํ•˜๋Š” ๋ฐฉ์‹์ด ์‚ฌ์šฉํ•˜๊ธฐ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹จ์ ์ด ์—†๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋งค์šฐ ๋Š๋ฆฌ๊ณ (๊ธฐ๋ณธ์ ์œผ๋กœ SCons ๋นŒ๋“œ ํŒŒ์ผ์€ Python ์Šคํฌ๋ฆฝํŠธ์ด๊ณ  ๋Œ€๋ถ€๋ถ„์˜ Python ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ์‹คํ–‰ ์†๋„์—์„œ ํŠนํžˆ ๋›ฐ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค) ์ƒ๋Œ€์ ์œผ๋กœ ์ธ๊ธฐ๊ฐ€ ๋‚ฎ๊ณ  ์ฐพ๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋งŽ์€ ๋ฆฌ์†Œ์Šค ๋˜๋Š” ๋ฌธ์„œ.
๊ฒŒ๋‹ค๊ฐ€, ๋‚˜๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ๋นŒ๋“œ ์‹œ์Šคํ…œ ์ฝ”๋“œ๋กœ ์–ผ๋งˆ๋‚˜ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฝ๊ณ  ์ž‘์—…ํ•˜๊ธฐ ์‰ฌ์šด์ง€๋Š” ๋ชจ๋ฅด์ง€๋งŒ, ์ œ ์ƒ๊ฐ์—๋Š” "์ด ์ฝ”๋“œ๋ฅผ ๋งŒ์ง€์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ฝ”๋“œ๋ฅผ ๊นจ๋œจ๋ฆด ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์‹œ ์ž‘๋™์‹œํ‚ค๋ ค๋ฉด ์ง€๋ฃจํ•˜๊ณ  ๊ณ ํ†ต์Šค๋Ÿฌ์šด ์ž‘์—…์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."

์ด์ œ Godot์˜ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•˜์ง€ ์•Š๊ณ  ๊ทธ๊ฒƒ์ด SCons๊ฐ€ ๋นŒ๋“œ ์‹œ์Šคํ…œ์œผ๋กœ ์„ ํƒ๋œ ํฐ ์ด์œ (๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„ ํฌ๊ฒŒ ๊บผ๋ฆฌ๋Š” ์ด์œ )๋ผ๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. Godot์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๋‚ด ์ƒ๊ฐ์ด ํ‹€๋ ธ๋‹ค๋Š” ๊ฑธ ์ฆ๋ช…ํ•ด ์ฃผ์„ธ์š”.

๊ทธ๋ ‡๋‹ค๋ฉด Meson์œผ๋กœ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ ๋ฌด์—‡์„ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

  • ๋” ๋‚˜์€ ๊ธฐ์ค€ ๋นŒ๋“œ ์†๋„(ํ†ตํ•ฉ ๋˜๋Š” ์Šค๋ ˆ๋“œ ๋นŒ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ž ์žฌ์ ์œผ๋กœ ํ›จ์”ฌ ๋” ๋น ๋ฆ„) [์ผ๋ถ€ ์ƒ˜ํ”Œ ๋ฒค์น˜๋งˆํฌ]
  • Meson์˜ ์ข…์†์„ฑ ์‹œ์Šคํ…œ์ธ wrap ์‚ฌ์šฉํ•˜๋ฉด ์ €์žฅ์†Œ ํฌ๊ธฐ๋ฅผ ์ค„์ด๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๋žฉ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“ˆ(๊ณต์‹ ๋ฐ ์‚ฌ์šฉ์ž ์ง€์ • ๋ชจ๋‘)์„ ๋‹จ์ˆœํžˆ 'ํ•˜์œ„ ํ”„๋กœ์ ํŠธ'๋กœ ํฌํ•จ(๋ฐ ์ž์ฒด ์ €์žฅ์†Œ๋กœ ์˜คํ”„๋กœ๋“œ)ํ•˜์—ฌ ๊ธฐ๋ณธ ์ €์žฅ์†Œ์˜ ํฌ๊ธฐ๋ฅผ ๋”์šฑ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. [ wrap ]

  • ์ด์— ๋Œ€ํ•ด SCons๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€ ๋ชจ๋ฅด์ง€๋งŒ Meson์€ Travis ๋ฐ AppVeyor์™€ ๊ฐ™์€ CI ๋„๊ตฌ์™€ ์ž˜ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. [CI]

  • Meson์€ ๋˜ํ•œ ํ˜„์ง€ํ™”๋ฅผ ์–ด๋Š ์ •๋„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด์ง€๋งŒ Godot๊ฐ€ ์ด๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๋‹ค๋ฅธ gettext ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณด์ด๋ฏ€๋กœ ์ด๊ฒƒ์ด ์—ฌ๊ธฐ์—์„œ ์–ผ๋งˆ๋‚˜ ํ˜ธํ™˜๋˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. [ํ˜„์ง€ํ™”]

  • ํ˜„์žฌ Godot๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ( godot-test repo๋Š” ํ™œ๋™์ด ์ ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค) Meson์€ ๊ทธ๋Ÿฌํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์ „ํญ์ ์ธ ์ง€์›์„ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋Š” ๊ฐ€์น˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. [๋‹จ์œ„ ํ…Œ์ŠคํŠธ]

  • Visual Studio์™€ XCode ๋ชจ๋‘์— ๋Œ€ํ•œ ๊ด€๋ จ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ Meson์€ IDE ๋ฐ ๊ธฐํƒ€ ๋นŒ๋“œ ๋„๊ตฌ์™€์˜ ํ†ตํ•ฉ์„ ํ—ˆ์šฉํ•˜๋Š” API์™€ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” VS๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์—‘์Šค์ฝ”๋“œ. [IDE ํ†ตํ•ฉ]

์ด๊ฒƒ์€ Godot๊ฐ€ ์ด๋ฏธ ์‚ฌ์šฉํ•˜๊ณ  ํ•„์š”๋กœ ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ(ํฌ๋กœ์Šค ์ปดํŒŒ์ผ ์ง€์›, ์†Œ์Šค ์ƒ์„ฑ, ์™ธ๋ถ€ ๋ช…๋ น ์‹คํ–‰ ๋“ฑ)์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
์‹œ์Šคํ…œ, GNOME, ElementaryOS, Xorg, Mesa์™€ ๊ฐ™์€ ๋ณต์žกํ•œ ํ”„๋กœ์ ํŠธ์™€ ๊ฐ™์ด ํฌ๊ณ  ๋ณต์žกํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ์ž„์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ์•ฝ์†,ํ•˜์ง€๋งŒ ๋‚œ ์–ด๋–ป๊ฒŒ ์š”๊ธˆ์„๋ณด๊ณ , ์ด๊ฒƒ์˜ ๊ฐœ๋… ์ฆ๋ช…์— ์‹œ๋„ ํ•  ์ˆ˜์žˆ๋Š” ์ž‘์—…์ด ๋  ์ˆ˜ ์—†๋‹ค. ๋˜ํ•œ ์ด ๊ธ€์„ ์ฝ๊ณ  ์žˆ๋Š” Meson ์ „๋ฌธ๊ฐ€/์—ด์„ฑํŒฌ์ด ์žˆ๋‹ค๋ฉด, ์ œ๊ฐ€ ๋ช‡ ๊ฐ€์ง€ ์ž˜๋ชป ์•Œ๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ž์œ ๋กญ๊ฒŒ ์˜๊ฒฌ์„ ๋ณด๋‚ด์ฃผ์‹ญ์‹œ์˜ค(Meson ๋ฐ SCons ๋ชจ๋‘).

๊ฑด๋ฐฐ!

archived discussion feature proposal buildsystem

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

Bazel์€ ๋” ์งง์€ ๋นŒ๋“œ ์„ค๋ช…๊ณผ ๋” ๋น ๋ฅธ ๋นŒ๋“œ๊ฐ€ ์žฅ์ ์ธ ๋˜ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ Google์—์„œ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ ์•„๋ฌด๋ฐ๋„ ๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

"Google์ด ์ค‘๋‹จํ•œ ๊ฒƒ"์ด๋ผ๋Š” Wikipedia ๋ฒ”์ฃผ๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. :)

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

๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด ๋นŒ๋“œ ์‹œ์Šคํ…œ ๋„๊ตฌ๋Š” ๋‹ค์Œ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ต์ฐจ ์ปดํŒŒ์ผ(๋™์ผํ•œ ํ˜ธ์ŠคํŠธ ํ”Œ๋žซํผ์—์„œ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋Œ€์ƒ ํ”Œ๋žซํผ์œผ๋กœ ์ปดํŒŒ์ผ).

    • "๊ฐ€๋Šฅ"์ด๋ž€ ํ˜ธ์ŠคํŠธ๊ฐ€ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค(๋”ฐ๋ผ์„œ macOS ๋ฐ iOS๋Š” Mac ์ปดํ“จํ„ฐ์—์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๊ณ  Linux์—์„œ๋Š” OSXCross๊ฐ€ ํฌํ•จ๋จ).

  • ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•(PO์—์„œ ๋ฒˆ์—ญ, GLSL์—์„œ ์…ฐ์ด๋” ํด๋ž˜์Šค, XML์—์„œ ๋ฌธ์„œ ๋ฐ์ดํ„ฐ).

    • SCons๋Š” ์ƒ์„ฑ๋œ ํŒŒ์ผ์ด ์ข…์†์„ฑ์ž„์„ ์•Œ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๊ด€๋ จ ํŒŒ์ผ์ด ๋‹ค์‹œ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ๋„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์—ฌ๋Ÿฌ ๋Œ€์ƒ ๋ฐ ๋Œ€์ƒ ๋‚ด์˜ ์˜ต์…˜(target=debug/release_debug/release, x86 ๋˜๋Š” ARM๊ณผ ๊ฐ™์€ ์•„ํ‚คํ…์ฒ˜, 32 ๋˜๋Š” 64๋น„ํŠธ).
  • ์ถ”๊ฐ€ ๋Œ€์ƒ์„ ์‚ฌ์šฉ์ž ์ง€์ •/ํ™œ์„ฑํ™”ํ•˜๋Š” ์˜ต์…˜(gdnative ๋ž˜ํผ, ๋ชจ๋…ธ ๊ธ€๋ฃจ ์—†์Œ, ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”: ๋ชจ๋“ˆ, ๋“œ๋ผ์ด๋ฒ„, ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ ๋“ฑ, ๋‚ด์žฅ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์ ์œผ๋กœ ์ปดํŒŒ์ผํ•˜๋„๋ก ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ๊ฐ๊ฐ์— ๋Œ€ํ•ด ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •) ํ•˜๋‚˜๋Š” ๊ฐœ๋ณ„์ ์œผ๋กœ).

๋‚˜๋Š” Meson์„ ๋ชจ๋ฅด์ง€๋งŒ ์œ„์˜ ๋ชจ๋“  ๊ฒƒ์„ ์ œ๊ณตํ•œ๋‹ค๋ฉด ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ์žŠ์ง€ ์•Š์•˜๋‹ค๋ฉด). ๋ฌผ๋ก  ๋ˆ„๊ตฐ๊ฐ€๋Š” Meson์—์„œ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ๊ทน์‹ฌํ•œ ๊ณ ํ†ต์„ ๊ฒช์–ด์•ผ ํ•˜๊ณ  ๋„๊ตฌ์™€ ๋นŒ๋“œ ์‹œ๊ฐ„์ด SCons๋ณด๋‹ค Godot์—๊ฒŒ ํšจ๊ณผ์ ์œผ๋กœ ๋” ๋‚ซ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ช‡๋ช‡ ์ œ3์ž ์˜์กด์„ฑ์€ Godot๋กœ ์ปดํŒŒ์ผ๋˜๋Š” ํŒจ์น˜๋ฅผ ์š”๊ตฌํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค. Wrap์— ํŒจ์น˜ ์ง€์›์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์ง€๋งŒ ํŒจ์น˜๋Š” ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ์–ด๋”˜๊ฐ€์— ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์—ฌ์ „ํžˆ ์ €์žฅ์†Œ์˜ ์ผ๋ถ€์ธ ๊ฒฝ์šฐ ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฝ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ผ๋ถ€๋Š” ์ „์ฒด ๋นŒ๋“œ์— ์ ์šฉํ•ด์„œ๋Š” ์•ˆ ๋˜๋Š” ํŠน์ˆ˜ ์ปดํŒŒ์ผ ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฐœ๋… ์ฆ๋ช…์€ ๋งค์šฐ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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

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

--

์ž, ๊ฐœ์ธ์ ์œผ๋กœ ์ €๋Š” ์ด์— ๋Œ€ํ•ด ์ฐฌ์„ฑ๋„ ๋ฐ˜๋Œ€๋„ ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ „์ฒด ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋Œ€์‹ (๋˜๋Š” ์ด์ „์—?) ์ถ”๊ตฌํ•ด์•ผ ํ•  ๋” ๋‚ฎ์€ ์„ฑ๊ณผ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์ด ์ค‘์š”ํ•œ ์‹œ์ ์—์„œ 3.0๊ณผ ์ฒซ ๋ฒˆ์งธ ํŒจ์น˜๊ฐ€ ์ตœ์ƒ์˜ ํ˜•ํƒœ๋กœ ์œ ์ง€๋˜๋„๋ก ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์†์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ๊ฐœ์„ ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์—, ๋‚˜๋Š” CI ๋นŒ๋“œ ์‹œ๊ฐ„๊ณผ ๋ชจ๋…ธ ๋นŒ๋“œ ์ƒํ™ฉ์˜ ๋ฒˆ๊ฑฐ ๋กœ์›€๋ณด๊ณ  ์‹ถ์€๋ฐ. (๋‚˜๋Š” ์ด๊ฒƒ์ด akien ์˜ TODO/๋ถˆ๋งŒ ๋ชฉ๋ก์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?)

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

TL;DR:

  • ๋‚˜๋Š” SCons ๋ฌธ์„œ/๋ฆฌ์†Œ์Šค๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‰ฌ์šด Python์€ ์ด๋ฅผ ์–ด๋Š ์ •๋„ ์ƒ์‡„ํ•ฉ๋‹ˆ๋‹ค. IMO
  • ์ƒˆ๋กœ์šด ๊ธฐ์—ฌ์ž๋กœ์„œ Godot ๋นŒ๋“œ ์‹œ์Šคํ…œ์€ ์„ค์ •ํ•˜๊ธฐ ๊ฐ€์žฅ ์„ฑ๊ฐ€์‹  ๊ฒƒ ์ค‘ ํ•˜๋‚˜์˜€์œผ๋ฉฐ ์ฒซ ๋ฒˆ์งธ ์„ฑ๊ณต์ ์ธ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ์ •๋ง ์งง์•˜์Šต๋‹ˆ๋‹ค.
  • ์ฐจ๋ผ๋ฆฌ 3.0/3.1์„ ์ตœ๋Œ€ํ•œ ๊ฐœ์„ ํ•˜๋Š”๋ฐ ๋“ค์ธ ๋…ธ๋ ฅ์„ ๋ดค์œผ๋ฉด ์ข‹๊ฒ ๊ณ , ์•ˆ์ •ํ™”๋˜๋ฉด ์ด๊ฑธ ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜๋„ ์žˆ๊ฒ  ๋„ค์š”.
  • ๋” ๋‚˜์€ CI ๋นŒ๋“œ ์‹œ๊ฐ„ ๋ฐ ๋” ์‰ฌ์šด Mono ๋นŒ๋“œ๊ฐ€ ๋” ์ค‘์š”ํ•  ์ˆ˜ ์žˆ์Œ

๋‚ด ์˜๊ฒฌ. :)

๋‚˜๋Š” 3.0์„ ์ถœ์‹œํ•˜๊ณ  ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค(3.0.1, 3.1)์— ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์ด ๊ธฐ๋ก์„ ์œ„ํ•ด ์ด๊ฒƒ๋ณด๋‹ค ์šฐ์„ ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ ˆ๋Œ€์ ์œผ๋กœ ๋ฏฟ์Šต๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ์€ ๋‹จ์ง€ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž / ํŠนํžˆ ๊ธฐ์ˆ ์— ์ •ํ†ตํ•œ ์ตœ์ข… ์‚ฌ์šฉ์ž์˜ ์ด์ต์„ ์œ„ํ•ด ์ •๋ง ์ดํ›„ ๋ช… (buildsystems์— ๋Œ€ํ•œ ์ž‘์—…์„ ๊ฐ™์ดํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ์•Œ - ์ค‘์š” ์ทจ์†Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค, ๊ทธ๊ฒƒ์€ DEVS '์™€ ์ฐธ์—ฌ์ž์˜ ์‚ถ์„ ์‰ฝ๊ฒŒํ•˜๊ธฐ ์œ„ํ•ด ๋ณด๋žŒ , ๊ทธ๋Ÿฌ๋‚˜ ๊ถ๊ทน์ ์œผ๋กœ ์ตœ์ข… ์‚ฌ์šฉ์ž์˜ ํ–‰๋ณต์ด ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค) ์ด ์ „์ฒด "๊ธฐํšŒ ๋น„์šฉ"์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ์‹œ์Šคํ…œ ๊ฐœ์„ ์— ์†Œ์š”๋œ ์‹œ๊ฐ„(๋˜๋Š” ์š”์ฒญํ•œ ์‚ฌ๋žŒ์— ๋”ฐ๋ผ ์†์‹ค/๋‚ญ๋น„)์ด ํ”„๋กœ์ ํŠธ ์ž์ฒด ๊ฐœ์„ ์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ. (๋‹น์‹ ์ด ๋‚˜์™€ ๊ฐ™์•„์„œ ์–ด์จŒ๋“  C++ ์ชฝ์—์„œ ์‹ค์ œ๋กœ ์ผํ•  ์ˆ˜ ์—†๋‹ค๋ฉด.)

๊ทธ๋ฆฌ๊ณ  ๊ถ๊ทน์ ์œผ๋กœ SCons๋Š” ์‹ค์ œ๋กœ "๊ทธ๋ƒฅ ์ž‘๋™"ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋Š” ์•„๋งˆ๋„ ์ถฉ๋ถ„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฒƒ์ด ๊ฒฐ๊ตญ์—๋Š” ์ผ์–ด๋‚˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๋Š” ์ผ์ด์ง€๋งŒ 3.1 ๋˜๋Š” 3.2์— ๋Œ€ํ•ด์„œ๋Š” ์ˆจ์„ ์ฐธ์ง€ ์•Š๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ์ง€์›์„ ์–ป๋Š”๋‹ค๋ฉด.

์ด ๋ชจ๋“  ๊ฒƒ์ด ๋งํ•˜์ง€๋งŒ, ์ง„ํ–‰ ์ƒํ™ฉ์„ ๊ธฐ๊บผ์ด ๋”ฐ๋ฅด๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์ด๋ฒˆ ์ฃผ ํ›„๋ฐ˜์— POC๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹น๋ถ„๊ฐ„์€ ์ด์— ๋Œ€ํ•œ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์—ด์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‹ค์ œ๋กœ SCons๊ฐ€ ๋Š๋ฆฌ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์œผ๋ฉฐ ์œ ์—ฐ์„ฑ(์šฐ๋ฆฌ๊ฐ€ ๋งŽ์€ ์ด์ ์„ ์ทจํ•˜๋Š”)์€ ์•„๋งˆ๋„ ๋‹ค๋ฅธ ์–ด๋–ค ๊ฒƒ๊ณผ๋„ ๋น„๊ตํ•  ์ˆ˜ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. SCons๋Š” ๋˜ํ•œ ๋งค์šฐ ์ž…์ฆ๋˜์—ˆ์œผ๋ฉฐ ๋นŒ๋“œ๋ฅผ ๋ง์น˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

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

์ž, ๊ฐœ์ธ์ ์œผ๋กœ ์ €๋Š” ์ด์— ๋Œ€ํ•ด ์ฐฌ์„ฑ๋„ ๋ฐ˜๋Œ€๋„ ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ „์ฒด ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋Œ€์‹ (๋˜๋Š” ์ด์ „์—?) ์ถ”๊ตฌํ•ด์•ผ ํ•  ๋” ๋‚ฎ์€ ์„ฑ๊ณผ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ์‹ค์ œ๋กœ ํ•ด๋กœ์šด ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‚ด ๋ง์€, ๋Œ€๋ถ€๋ถ„์˜ Godot ๊ธฐ๊ณ ์ž๋“ค์€ ์—ฌ๊ฐ€ ์‹œ๊ฐ„์— ์ผํ•˜๊ณ  ๊ทธ๋“ค์ด ์›ํ•˜๋Š” ์ผ์„ ํ•ฉ๋‹ˆ๋‹ค. @NullConstant ์˜ ๊ฒฝ์šฐ "์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ์•„๋ฌด ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Œ"(๋ฌธ์ œ๋ฅผ ์ˆ˜์ • ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์‹ค์ œ C++ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์—…ํ•˜๊ณ  ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๊ฒƒ์— ๋Œ€ํ•œ ๋ฒ„๊ทธ ์‚ฌ๋ƒฅ์ด ๋” ์–ด๋ ต๋‹ค๋Š” ์˜๋ฏธ)์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ข‹์€ ์ผ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ, "๋” ์ข‹์€ ์ผ์ด ์žˆ๋‹ค"๋Š” ์ฃผ์žฅ์€ IMO์—์„œ ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์•„๋ฌด๊ฒƒ๋„ ๊นจ์ง€์ง€ ์•Š๊ณ  ๋ฆด๋ฆฌ์Šค์— ๊ฐ€๊นŒ์›Œ์ง€์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•  ๋•Œ๊นŒ์ง€๋Š” ์•„๋ฌด ๊ฒƒ๋„ ๋ณ‘ํ•ฉ ๋˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋” ์ค‘์š”ํ•œ ์ผ์ด ์žˆ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ์‹œ์ž‘๋  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

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

๊ทธ๋ž˜๋„ SCons๋Š” ๋Š๋ฆฌ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋‹ค์ง€ ๋Š๋ฆฌ์ง€๋Š” ์•Š์ง€๋งŒ ์ง„ํ–‰ ์ƒํƒœ ๋ฐ ์บ์‹œ์™€ ๊ฐ™์€ ๋ฌธ์ œ๋กœ ์ธํ•ด ์žฌ๊ตฌ์ถ•์ด ๋Š๋ ค์ง€๋ฏ€๋กœ(๋””์Šคํฌ I/O๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์บ์‹œ์—์„œ ์ฝ๋Š” ๊ฒƒ์ด ๋Š๋ ค์ง) ์žฌ๊ตฌ์ถ•ํ•  ๋•Œ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ์•ฝ๊ฐ„์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ณ  ๊ทธ ํ›„์—๋Š” ์ƒ๋‹นํžˆ ๋น ๋ฆ…๋‹ˆ๋‹ค.

Meson์ด ํ›จ์”ฌ ๋” ๋น ๋ฅผ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ธฐ๊บผ์ด ์‹œ๋„ํ•œ๋‹ค๋ฉด ๋‚˜๋Š” ๋ฐ˜๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ค, ๋ฌผ๋ก , ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์‹œ๊ฐ„์„ ๋“ค์—ฌ์„œ ์ „ํ™˜์„ ๋ณด์ฆํ•  ๋งŒํผ ์ถฉ๋ถ„ํžˆ ํฐ ๊ฐœ์„  ์‚ฌํ•ญ์„ ๋ณด์—ฌ ์ค€๋‹ค๋ฉด ์ €๋Š” ์ „์ ์œผ๋กœ ์ฐฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. :)

๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด, ๋‚˜๋Š” C++ ๋ฒ„๊ทธ๋ฅผ ์‚ฌ๋ƒฅํ•˜๊ฑฐ๋‚˜ ๊ทธ ์ „๋ฉด์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ผ์„ ๋‹ค๋ฃฐ ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ ๋Œ€์‹  ์ด ์ผ์„ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋‚˜(๋ฐ/๋˜๋Š” ๋ฏธ๋ž˜์— ์ด ์ผ์„ ํ•˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ)์—๊ฒŒ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋งค์šฐ ๊นจ๋—ํ•˜๊ณ  ์ด์ค‘์ ์ธ ๋ชฉํ‘œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  • Godot๊ฐ€ ์–ด๋–ค ํ˜•ํƒœ๋กœ๋“  Meson์œผ๋กœ ์ปดํŒŒ์ผํ•˜๋„๋ก ํ•˜์„ธ์š”.
  • ํ˜„์žฌ SCons๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์†๋„๋ฅผ ๊ฐœ์„ ํ•˜์—ฌ).

๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” SCons์˜ ์†๋„๊ฐ€ ๋”์ฐํ•  ์ •๋„๋กœ

๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” ์•„๋งˆ๋„ ์…ฐ์ด๋”์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํŒŒ์ด์ฌ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. meson์— ๊ทธ๋Ÿฐ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Meson์„ ๋Œ€์•ˆ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ๊ฐœ์„  ์‚ฌํ•ญ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ณผ ๊ฒƒ์ด๋‹ค.

๊ทธ๊ฒƒ์€ ๋Œ€์•ˆ์ด ๋˜์–ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ๋ถ„๋ช…ํžˆ ๋” ๋‚˜์€ ๊ฒฝ์šฐ ๊ทธ ๋Œ€์•ˆ์œผ๋กœ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ์ œ๊ณตํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๋ฏธ์นœ ์ง“์ž…๋‹ˆ๋‹ค.

๋งž์Šต๋‹ˆ๋‹ค. ๊ณต์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์•ž์œผ๋กœ ๋ฉฐ์น /๋ช‡ ์ฃผ์— ๊ฑธ์ณ ๊ทธ๊ฒƒ์„ ํ•ดํ‚นํ•˜๊ธฐ ์‹œ์ž‘ํ•  ๊ฒƒ์ด๊ณ , ์ด๊ฒƒ์ด ์•„๋ฌด ๋ฐ๋‚˜ ์ง„ํ–‰๋˜๋Š”์ง€, ๊ทธ๊ฒƒ์ด ์ง„์ •์œผ๋กœ ์ถ”๊ตฌํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ๋…ธ๋ ฅ์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

(๋ฒค์น˜๋งˆํฌ์™€ ๊ฐ™์€) ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์žˆ์œผ๋ฉด ๋‹ค์‹œ ๋ณด๊ณ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

meson์ด ์•„๋‹ˆ๋ผ ์•ž์œผ๋กœ ๋ช‡ ์ฃผ ์•ˆ์— msvc์—์„œ Windows 64๋น„ํŠธ์šฉ godot under bazel์„ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ฒƒ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Bazel์€ ๋” ์งง์€ ๋นŒ๋“œ ์„ค๋ช…๊ณผ ๋” ๋น ๋ฅธ ๋นŒ๋“œ๊ฐ€ ์žฅ์ ์ธ ๋˜ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ Google์—์„œ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ ์•„๋ฌด๋ฐ๋„ ๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“ , ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ Godot๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์†Œ์š”๋˜๋Š” ๊ณ„์‚ฐ ์‹œ๊ฐ„์˜ 99%๊ฐ€ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์†Œ๋น„๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ ๋†’์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋นŒ๋“œ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ „ํ˜€ ์—†๋‹ค๊ณ  ํ•ด๋„ ๋นŒ๋“œ ์‹œ๊ฐ„์ด 1% ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค. ๋” ์ ์€ ์ฝ”๋“œ์™€ ๋” ๋งŽ์€ ์•ˆ์ •์„ฑ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ(๋˜๋Š” ๋‚ด๊ฐ€ ํ‹€๋ ธ๋‹ค๊ณ  ํŒ๋ช…๋œ ๊ฒฝ์šฐ :)) 5% ๊ฐ์†Œ๋„ ๊ฐ€์น˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

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

์ „์— ๋งํ–ˆ๋“ฏ์ด SCons๋Š” ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๋Š๋ฆฝ๋‹ˆ๋‹ค(์‹ค์ œ๋กœ ์ปดํŒŒ์ผ์„ ์‹œ์ž‘ํ•˜๊ธฐ๊นŒ์ง€ ๋ช‡ ์ดˆ๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค). ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์ „์ฒด ์†Œ์Šค๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋ผ์ธ๋งŒ ๋ณ€๊ฒฝํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒฝ์šฐ ์›Œํฌํ”Œ๋กœ๋ฅผ ํฌ๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(IMO๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๋กœ ์ž‘์—…ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ๋„์šฐ์‹ญ์‹œ์˜ค) . ๋”ฐ๋ผ์„œ 10๋ถ„ ๋นŒ๋“œ์—์„œ 5์ดˆ ๊ฐ์†Œ๋Š” ๊ด€๋ จ์ด ์—†์ง€๋งŒ 10์ดˆ ๋นŒ๋“œ์—์„œ 5์ดˆ ๊ฐ์†Œ๋Š” ์ฃผ์š” ๊ฐœ์„  ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด์™€ ๊ด€๋ จํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ž‘๋™ํ•˜๋Š”์ง€ ์ฆ๋ช…ํ•˜๋ ค๋ฉด ๋งŽ์€ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. @reduz๊ฐ€ ๋งํ–ˆ๋“ฏ์ด SCons๋Š” ๋นŒ๋“œ๋ฅผ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ค์ง€ ์•Š์•˜์œผ๋ฉฐ ์ด๋Š” ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

Bazel์€ ๋” ์งง์€ ๋นŒ๋“œ ์„ค๋ช…๊ณผ ๋” ๋น ๋ฅธ ๋นŒ๋“œ๊ฐ€ ์žฅ์ ์ธ ๋˜ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ Google์—์„œ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ ์•„๋ฌด๋ฐ๋„ ๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

"Google์ด ์ค‘๋‹จํ•œ ๊ฒƒ"์ด๋ผ๋Š” Wikipedia ๋ฒ”์ฃผ๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. :)

@mhilbrunner ์•„๋‹ˆ์š”, ์—ฌ์ „ํžˆ ์œ ์ง€ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค https://github.com/bazelbuild/bazel

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

์šฐ๋ฆฌ๋Š” ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด C#์„ ๋ฐ›์•„๋“ค์˜€๊ธฐ ๋•Œ๋ฌธ์— Cake ์™€ ๊ฐ™์€ ๊ฒƒ์„ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ง์ ‘ ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ๋‹น์‹ ์˜ ์ƒ๊ฐ์ด ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€๋Š” ์ ์–ด๋„ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ Python๋ณด๋‹ค ๋” ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด C#์„ ๋ฐ›์•„๋“ค์˜€๊ธฐ ๋•Œ๋ฌธ์— Cake ์™€ ๊ฐ™์€ ๊ฒƒ์„ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Godot๊ฐ€ ๋Œ€๋ถ€๋ถ„ C++ ํ”„๋กœ์ ํŠธ์ด๊ณ  C# ์ง€์› ์—†์ด ์ปดํŒŒ์ผ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•˜๋ฉด Godot๋ฅผ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•ด Mono ์„ค์น˜๋ฅผ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์ƒ๊ฐ์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

Meson ๋˜๋Š” CMake(Ninja ์ƒ์„ฑ๊ธฐ ํฌํ•จ)๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์„ฑ๋Šฅ ์ˆ˜์ค€์€ Godot์˜ ๋ชฉ์ ์— ์ถฉ๋ถ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@Calinou ๋‹น์‹ ์ด ๋งž์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋น„๋ก ๋ชจ๋‘๊ฐ€ C#์˜

ํŽธ์ง‘ํ•˜๋‹ค:

๋ชจ๋…ธ ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ ํ•„์š”๋กœ ๋ช…ํ™•ํžˆํ•˜๊ธฐ๋Š” ์†Œ์œ„ AAA ๊ฒŒ์ž„ ์—”์ง„์ด ๋ฐฉ๋ฒ•์€ ๋” ๋งŽ์€ ๋””์Šคํฌ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณ ๋„ (Godot)๊ฐ€, ๋‚˜์—๊ฒŒ ๋‚˜์œ๋กœ ์†Œ๋ฆฌ๊ฐ€ ๋‚˜์ง€ ์•Š๋Š”๋‹ค ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ์„ค์น˜๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค :

  • ๊ณ ๋„ <50MB
  • Mono ์ง€์›์ด ์žˆ๋Š” Godot (<50MB) + Mono Framework (~350MB) = ~400MB
  • ์–ธ๋ฆฌ์–ผ ~20GB
  • ์œ ๋‹ˆํ‹ฐ ~10GB
  • ํฌ๋ผ์ด์—”์ง„ ~8GB

๊ฒŒ๋‹ค๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํŽธ์ง‘๊ธฐ์—์„œ Mono ์ง€์›์„ ํ•˜๋“œ์ฝ”๋”ฉํ•˜๊ณ  ๋Ÿฐํƒ€์ž„์— C# ์Šคํฌ๋ฆฝํŒ…์„ ์ง€์›ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  Mono ํ”„๋ ˆ์ž„์›Œํฌ ๋˜๋Š” ์ ์ ˆํ•œ ๋‚ด๋ณด๋‚ด๊ธฐ ํ…œํ”Œ๋ฆฟ์„ ์š”์ฒญํ•˜๋Š” ์ผ๋ถ€ ๋…ผ๋ฆฌ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” CMake๋ฅผ ์ข‹์•„ํ•˜๊ณ  meson์€ ๋ฉ‹์ง€๊ฒŒ ๋ณด์ด์ง€๋งŒ http://www.rojtberg.net/1481/do-not-use-meson ๊ธฐ์‚ฌ์— ๋™์˜ํ•˜๋Š” ๊ฒฝํ–ฅ์ด

์ €๋Š” Godot๋ฅผ Meson์œผ๋กœ ์˜ฎ๊ธฐ๊ธฐ ์œ„ํ•œ ๋ฐœ๋†€๋ฆผ์„ ํ•˜๋Š” ๋ฐ ๋งค์šฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ œ๊ฐ€ Godot์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๊ณ  ์žˆ๋Š” ์œ ์ผํ•œ ๊ฒƒ(๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ)์€ Scons์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ช‡ ๋…„ ์ „์— ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ๊ณ , ๋‚ด ํ‰์ƒ ๋™์•ˆ ์ด๋ณด๋‹ค ๋” ๊ณ ํ†ต์Šค๋Ÿฌ์šด ์ ์ง„์  ๊ฐœ๋ฐœ ๊ฒฝํ—˜์€ ์—†์—ˆ๋‹ค.

์œ„์— ๋งํฌ๋œ ๊ธฐ์‚ฌ์—๋Š” CMake๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๊ณ  ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•˜๋Š” ๋งŽ์€ ์ฃผ์žฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Meson์˜ ๋นŒ๋“œ ํŒŒ์ผ์€ ์ฝ๊ธฐ๊ฐ€ ๋งค์šฐ ์‰ฝ๊ณ  Python๊ณผ ์œ ์‚ฌํ•œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ „ํ™˜์ด ๋น ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ์— ๊ฒŒ์‹œํ•˜๋Š” ๋‚ด์šฉ์€ ํ’‹์›Œํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด pull ์š”์ฒญ์ด ๋ณ‘ํ•ฉ์— ๋Œ€ํ•ด ๊ณ ๋ ค๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ์Šค๋ ˆ๋“œ์— ๊ฒŒ์‹œํ•˜๋Š” ๋‚ด์šฉ์€ ํ’‹์›Œํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด pull ์š”์ฒญ์ด ๋ณ‘ํ•ฉ์— ๋Œ€ํ•ด ๊ณ ๋ ค๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ณ ๋ ค๋˜์ง€๋งŒ SCons๋ณด๋‹ค ์œ ๋ฆฌํ•œ ๊ฒƒ์œผ๋กœ ์ž…์ฆ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

CMake๋ฅผ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€์ด ์•„๋‹Œ ๋˜ ๋‹ค๋ฅธ ๋นŒ๋“œ ์‹œ์Šคํ…œ์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋„ˆ๋ฌด ๋งŽ์€ ์˜ต์…˜์ด ์ƒ๊น๋‹ˆ๋‹ค. ์™œ SCons๋ณด๋‹ค ์ค‘๊ฐ„์ž…๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด bazel/buck๋„ ๊ดœ์ฐฎ์€ ๋„๊ตฌ์ž…๋‹ˆ๊นŒ? ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ CMake์— ์ฐฌ์„ฑํ•˜๋Š” ๊ฐ€์žฅ ํฐ ์ฃผ์žฅ์€ ํ•ด๋‹น ์ƒํƒœ๊ณ„๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์ถ•๋œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. Clang ์ปดํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์—ฌ๋Ÿฌ ์šด์˜ ์ฒด์ œ์— ๋Œ€ํ•œ ํŒจํ‚ค์ง• ์ง€์› ๋“ฑ. ๋‚ด๊ฐ€ ๋“ค์€ ์œ ์ผํ•œ ์œ ํšจํ•œ ๋‹จ์ ์€ ์ž˜๋ชป๋œ ๊ตฌ๋ฌธ๊ณผ ๋ฌธ์„œ์ด์ง€๋งŒ, ์ด๊ฒƒ์œผ๋กœ ๋‚ด ์ž…์žฅ์„ ๋ฐ”๊ฟ€ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ๊ฐ•๋ ฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์™œ SCons๋ณด๋‹ค ์ค‘๊ฐ„์ž…๋‹ˆ๊นŒ?

Meson์€ ์ฆ๋ถ„ ๊ฐœ๋ฐœ์— ํ›จ์”ฌ ๋” ๋น ๋ฅธ ๋‹Œ์ž ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Windows์—์„œ๋Š” ์–ด๋–ค ์ข…๋ฅ˜์˜ Visual Studio ๊ฒฝ๋กœ ์กฐ์ž‘๋„ ์ˆ˜ํ–‰ํ•  ํ•„์š” ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Meson์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. scons๋ณด๋‹ค meson์„ ์‚ฌ์šฉํ•˜๋ฉด ํŠนํžˆ Visual Studio๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์˜ ๊ฒฝ์šฐ ๋Œ€์ƒ ์ฐฝ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋งŽ์ด ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋‹ˆ๋ฉด bazel/buck๋„ ๊ดœ์ฐฎ์€ ๋„๊ตฌ์ž…๋‹ˆ๊นŒ?

bazel๊ณผ buck์ด ๋ชจ๋‘ Java๋กœ ์ž‘์„ฑ๋˜์—ˆ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•˜๋ฉด(android๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ข…์†์„ฑ godot๊ฐ€ ์žˆ๊ณ  ๊ธฐ์ˆ ์ ์œผ๋กœ NDK ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ pip install meson ํ†ตํ•ด meson(๋ฐ ninja)์„ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Clang ์ปดํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

Meson์€ ninja์— ๋‚ด์žฅ๋œ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์ด๋ฏ€๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ์šด์˜ ์ฒด์ œ์— ํŒจํ‚ค์ง• ์ง€์›

Meson๋„ ์ด๋ฅผ ์ง€์›ํ•˜๋ฉฐ ์ ์ ˆํ•œ ๊ฒฝ์šฐ pkg-config์— ํฌ๊ฒŒ ์˜์กดํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋“ค์—ˆ๋˜ ์œ ์ผํ•œ ์œ ํšจํ•œ ๋‹จ์ ์€ ์ž˜๋ชป๋œ ๊ตฌ๋ฌธ๊ณผ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.

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

my_meson_list = ['x', 'y', 'z']
message(my_meson_list)

๋Œ€

set(MY_CMAKE_LIST "x;y;z")
message(STATUS ${MY_CMAKE_LIST})

ํŠนํžˆ cmake๊ฐ€ ๋•Œ๋•Œ๋กœ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•  ๋•Œ ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ๊ธฐ ํ‘œํ˜„์‹์„ ์‹œ์ž‘ํ•˜๋ฉด ๋งค์šฐ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# In one file
set(USE_STD_CXX11 "-std=c++11")
set(USE_STDLIB_LIBCXX "-stdlib=libc++")

# Possibly elsewhere
set(LIBCXX $<BOOL:${CAN_USE_STDLIB_LIBCXX}>,$<BOOL:${BUILD_WITH_LIBCXX}>)
set(NO_RTTI $<BOOL:${CAN_USE_NO_RTTI}>,$<BOOL:${DISABLE_RTTI}>)

# Later on...
target_compile_options(my-exe
  PUBLIC
  $<$<BOOL:${CAN_USE_STD_CXX11}>:${USE_STD_CXX11}>
  $<$<AND:${LIBCXX}>:${USE_STDLIB_LIBCXX}>
  $<$<AND:${NO_RTTI}>:${USE_NO_RTTI}>
  # Oh yeah, you're gonna want more of these, because you can't trust compiler interfaces
)

# Generator expressions mean you can't follow the flow of the build to see what is called and defined where. This is a completely valid use of CMake.
check_cxx_compiler_flag(${USE_STDLIB_LIBCXX} CAN_USE_STDLIB_LIBCXX)
check_cxx_compiler_flag(${USE_NO_RTTI} CAN_USE_NO_RTTI)

๋“ฑ๊ฐ€ ์ค‘๊ฐ„์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

cxx = meson.get_compiler('cpp')
# This is an extremely simplified approach. One can do a different option when dealing with MSVC and gcc support.
args = compiler.get_supported_arguments('-std=c++11', '-stdlib=libc++')
add_project_arguments(args)

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ๋‚˜๋Š” ๋ชจ๋“  C++ ๋นŒ๋“œ ์‹œ์Šคํ…œ ์ค‘์—์„œ Meson์ด ๊ฐ€์žฅ ๋”์ฐ ํ•˜๋‹ค๋Š” ์ ์— ์ฃผ๋ชฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์˜ ์‚ฌ์šฉ์— ๋ฐ˜๋Œ€ํ•˜๋Š” ์ฃผ์žฅ์€ ์›น ๋งŒํ™”์˜ ๊ทธ๋ฆผ์ธ ๊ฒฝํ–ฅ์ด ์žˆ๊ณ , ์–ด๋–ค ์‚ฌ๋žŒ๋“ค์€ CMake๊ฐ€ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด ์†์„ ํ”๋“œ๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์œผ๋ฏ€๋กœ, "์ด๋ด ์ ์–ด๋„ CMake๋Š” autotools๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค"๋ผ๊ณ  ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ฌด์—‡๋ณด๋‹ค๋„(ํŠนํžˆ gdnative๋กœ Godot๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ด๊ฒƒ์€ ์ •๋ง ์ค‘์š”ํ•œ ์ผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค) Meson์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ํ—ค๋”๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. CMake๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  cotire๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ๋ฅผ ํ•ดํ‚นํ•˜๋ฉด ๊ฐ€์น˜๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).

์ด๊ฒƒ์ด gdnative ์‚ฌ์šฉ์ž์˜ ๋นŒ๋“œ ์†๋„๋ฅผ ์–ผ๋งˆ๋‚˜ ๋†’์ผ ์ˆ˜ ์žˆ๋Š”์ง€ ๋งํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ gcc ๋ฐ msvc์—์„œ ์ƒ๋‹นํ•œ ํ–ฅ์ƒ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ตœ์†Œํ•œ msvc์—์„œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์€ ๋ถˆ๊ฐ€ํ”ผํ•ฉ๋‹ˆ๋‹ค). Godot์—์„œ ๋ฐœ๊ฒฌ๋˜๋Š” ์•„์ฃผ ์ ์€ ์–‘์˜ ํ…œํ”Œ๋ฆฟ ์ฝ”๋“œ์— ๋Œ€ํ•ด extern template ์‚ฌ์šฉ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฐ˜๋ณต ๋ฐ ์ฆ๋ถ„ ๋นŒ๋“œ์— ์ค‘์š”ํ•œ ์ƒ๋‹นํ•œ ๋นŒ๋“œ ์‹œ๊ฐ„ ๊ฐœ์„ ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Meson์€ ๋‹Œ์ž ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ์ฆ๋ถ„ ๊ฐœ๋ฐœ์— ํ›จ์”ฌ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค.

CMake๋Š” ๊ธฐ์กด Makefile ๋Œ€์‹  Ninja ๋นŒ๋“œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ -G Ninja ๋ฅผ ๋ช…๋ น์ค„์— ์ „๋‹ฌํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์‹œ๋„ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์ ํŠธ์—์„œ ๊ฝค ์ž˜ ์ž‘๋™ํ•˜๋ฉฐ ์ „์ฒด์ ์œผ๋กœ ์•ฝ๊ฐ„ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค(๊ฒŒ๋‹ค๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  CPU ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค).

Meson์€ ๋‚ด๊ฐ€ ๋ณธ ์›์‹œ ์„ฑ๋Šฅ ๋น„๊ต์—์„œ ์—ฌ์ „ํžˆ ์ด๊ธฐ๊ณ  ์žˆ์ง€๋งŒ ์ด๊ฒƒ์€ Meson๊ณผ CMake ์„ฑ๋Šฅ ๊ฐ„์˜ ๊ฒฉ์ฐจ๋ฅผ ์ค„์ด๋Š” ๋ฐ ํ™•์‹คํžˆ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

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

์•„์ฃผ ์ฒ ์ €ํ•ฉ๋‹ˆ๋‹ค! ๋นŒ๋“œ ์‹œ์Šคํ…œ์—์„œ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ข‹์€ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์–ด์„œ ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ์ „ํžˆ ํ”„๋กœ์ ํŠธ๊ฐ€ ์˜์กดํ•  ์ˆ˜ ์žˆ๋Š” C++ ์„ธ๊ณ„์—์„œ ํ‘œ์ค€ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” meson์ด ์ž์ฒด์ ์ธ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ CMake ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ์˜€์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ ํ”„๋กœ์ ํŠธ๊ฐ€ ์˜์กดํ•  ์ˆ˜ ์žˆ๋Š” C++ ์„ธ๊ณ„์—์„œ ํ‘œ์ค€ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ €๋ฅผ ๋ฏฟ์œผ์„ธ์š”. ์ €๋ณด๋‹ค ๋” ์›ํ•˜๋Š” ์‚ฌ๋žŒ์€ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ผ์ข…์˜ ๋นŒ๋“œ ์‹œ์Šคํ…œ ์“ฐ๋ ˆ๊ธฐ ๊ณ ๋ธ”๋ฆฐ์ด ๋˜์—ˆ๊ณ  CppCon์—์„œ ๊ทธ๋“ค์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ธฐ๊นŒ์ง€ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ถˆํ–‰ํžˆ๋„ (๋˜๋Š” ๋‹คํ–‰์Šค๋Ÿฝ๊ฒŒ๋„?) ๊ฑฐ์˜ ์ง‘์ฐฉ์˜ ์ง€์ ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋นŒ๋“œ ์‹œ์Šคํ…œ์— ๋Œ€ํ•ด ๋งŽ์€ ๊ด€์‹ฌ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. :)

์ด ๋ง์„ ํ•˜๊ณ  ์‹ถ์ง€๋งŒ Windows์—์„œ Godot๋ฅผ ์˜ค๋žซ๋™์•ˆ ๋นŒ๋“œํ•  ๋•Œ๋งˆ๋‹ค Python์ด ์ผ๊ด€๋˜๊ฒŒ ๋‚ด CPU์˜ 15% ์ด์ƒ์„ ์ฐจ์ง€ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์— ์ฃผ๋ชฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹œ์ž‘์ด ๋Š๋ฆด ๋ฟ์ธ์ง€ ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ฐ€ meson์œผ๋กœ ๋งŒ๋“  ์ž‘์€ ํ”„๋กœํ† ํƒ€์ž… Godot ์—”์ง„์„ ๋งŒ๋“ค๊นŒ์š”? ๋‚˜๋Š” bazel์— ๋Œ€ํ•œ ์ž‘์€ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ์ง€์ ์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

Godot์˜ 2D ์ „์šฉ ๋นŒ๋“œ๋Š” ๋ชจ๋“  ์˜ต์…˜์„ ๋น„ํ™œ์„ฑํ™”ํ•œ ์ƒํƒœ์—์„œ ํ…Œ์ŠคํŠธํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ง๋ฉดํ•œ ์ฒซ ๋ฒˆ์งธ ์žฅ์• ๋ฌผ์€ core/make_binders.py์˜€์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Godot๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ž๋™ ์ƒ์„ฑ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

๋นŒ๋“œ ์‹œ์Šคํ…œ Bazel์—์„œ ์ดˆ๊ธฐ ํ”„๋กœํ† ํƒ€์ž…์„ ๋งŒ๋“ค์—ˆ์ง€๋งŒ ๋‹ค๋ฅธ ๋ฌธ์ œ์—์„œ ์„ค์ •์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. https://github.com/godotengine/godot/issues/18518

์ผ์ฃผ์ผ ๋™์•ˆ ์‹œ๊ฐ„์ด ์—†์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ Bazel BUILD์—์„œ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Lol bazel์€ ์–ด๋–ป๊ฒŒ ์ฐธ์—ฌํ•˜๊ฒŒ ๋˜์—ˆ๋‚˜์š”?

๋‹ค๋ฅธ ๋นŒ๋“œ ์‹œ์Šคํ…œ์œผ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ํ•œ ๋ฒˆ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ€๋Šฅํ•œ ์ตœ์ƒ์˜ ์˜ต์…˜์„ ์ฐพ์•„์•ผ ํ•˜์ง€ ์•Š์„๊นŒ์š”? ๋‚˜๋Š” Cake vs Bazel vs Scons ๋น„๊ต ์ฐจํŠธ๋ฅผ ๋ณด๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์ง€๋งŒ, ๊ทธ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ํ’‹์›Œํฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด Cake์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ์ „ํ˜€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@rraallvv ๋Š” ์ผ€์ดํฌ ๋˜๋Š” CMake๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

@isaachier ๋‚ด ๋‚˜์œ, ๋‚˜์— ๋Œ€ํ•ด ์–˜๊ธฐํ–ˆ๋‹ค www.cakebuild.net , ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค,๋ณด๋‹ค ๊ตฌ์ฒด์ ์ธ๋˜์–ด ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

C# ์ „์šฉ ์•„๋‹Œ๊ฐ€์š”?

@isaachier ์ €๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. SCons๊ฐ€ Python์œผ๋กœ ์ž‘์„ฑ๋˜๊ณ  C++๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ผ€์ดํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ๋‚˜๋Š” ๋ฐฉ๊ธˆ ๊ทธ๋“ค์˜ gitter chat ์—์„œ ๋ฌผ์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋‹ต๋ณ€์„ ๋‹ค์‹œ ๊ฒŒ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ก์„ ์œ„ํ•ด @rraallvv ์ฃผ์š” ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ๋‚˜๋ž€ํžˆ ๋น„๊ตํ•˜๋Š” ์•„์ด๋””์–ด๋Š” ์ข‹์€ ์•„์ด๋””์–ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋‚ด๊ฐ€ ์˜จ๋ผ์ธ์—์„œ ์ƒ๋‹นํžˆ ํŽธ๊ฒฌ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋นŒ๋“œ ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•˜์ง€ ์•Š์Œ): https://carlosvin.github.io/posts/choosing-modern-cpp-stack , https://www.reddit. com/r/cpp/comments/6euc7b/build_systems_bazel_buck/die6g1y/ , https://stackoverflow.com/a/12022652/1930331.

๋‚ด ๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ:

  • CMake : ๊ฝค ๋ชป์ƒ๊ธด ์–ธ์–ด์ด์ง€๋งŒ ์–ด๋””์—๋‚˜ ์žˆ๊ณ  ๊ฑฐ์˜ ์—…๊ณ„ ํ‘œ์ค€์ž…๋‹ˆ๋‹ค.
  • SCons : ๋Š๋ฆฌ๊ณ , ์˜ค๋ž˜๋˜๊ณ , IDK ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • meson : ์—„์ฒญ๋‚˜๊ฒŒ ๋Š๋ฆฌ์ง€ ์•Š์€ ์ƒˆ๋กญ๊ณ  ๋ฉ‹์ง„ Python ๊ธฐ๋ฐ˜ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ์ฃผ์š” ๋‹จ์ ์€ ๊ถค๋„์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ฃผ๊ฐ„ ๋นŒ๋“œ ์‹œ์Šคํ…œ์˜ ๋˜ ๋‹ค๋ฅธ ํŠน์ง•์ธ์ง€๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • Autotools : ๊ณ ๋Œ€, ๋„๊ตฌ ์ง€์› ์—†์Œ(์˜ˆ: Clang ์ž๋™ ์™„์„ฑ ์ง€์› ๋˜๋Š” ์ •์  ๋ถ„์„์„ ์œ„ํ•œ ์ปดํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค). Windows ์ง€์›์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ฌด์Šจ ์ˆ˜๋ฅผ ์จ์„œ๋ผ๋„ ํ”ผํ•˜์‹ญ์‹œ์˜ค.
  • bazel : Google ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž/๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ํ•˜๋‚˜๋กœ ํ†ตํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Hunter ์™€ ๊ฐ™์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ CMake์— ๋งŽ์€ ๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Google ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์ผ๋ฐ˜ ๋Œ€์ค‘์ด ์•„๋‹Œ Google์ด ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ์— ์ดˆ์ ์„ ๋งž์ถ”๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์žฅ๊ธฐ์ ์ธ ๊ถค์ ์„ ์ธก์ •ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ์ƒˆ๋กญ์Šต๋‹ˆ๋‹ค.

C++์— ๋Œ€ํ•œ ์‚ฌ์‹ค์ƒ์˜ ํ‘œ์ค€์„ ์›ํ•˜๊ณ  CMake๊ฐ€ ํ˜„์žฌ ๊ฐ€์žฅ ํฐ "์‹œ์žฅ ์ ์œ ์œจ"์„ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐํšŒ๊ฐ€ ์žˆ์„ ๋•Œ๋งˆ๋‹ค CMake๋ฅผ ์ถ”์ง„ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

@isaachier ํ•ด๋‹น ์ •๋ณด๋ฅผ ๊ณต์œ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. C++์—์„œ ์Šคํฌ๋ฆฝํŒ…์„ ์ง€์›ํ•˜๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— C#์„ ์ถ”์ง„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋ฆฌ์„๊ฒŒ ๋“ค๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์•„์ง ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š์€ ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ด C++ REPL ์€ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ด๋™ํ•˜์—ฌ ์–ด๋Š ๊ฒƒ์ด ๋” ๋‚ซ๊ณ  ๋” ๋น ๋ฅธ์ง€์— ๋Œ€ํ•œ ๋…ผ์Ÿ์„ ๋๋‚ด๊ณ  ์‹ถ๋‹ค๋ฉด ๋นŒ๋“œ ์‹œ์Šคํ…œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ดํ•ด๊ฐ€ ์•ˆ ๋ผ์š”. C++๋Š” ์•„๋งˆ๋„ ๋”์ฐํ•œ ๋นŒ๋“œ ์–ธ์–ด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Š๋ฆผ์€ ์‚ฌ์šฉ๋œ ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์ด ์•„๋‹ˆ๋ผ ๋‚ด๋ถ€ ๋นŒ๋“œ ์‹œ์Šคํ…œ ์ฝ”์–ด AFAIK์™€ ๋” ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@isaachier ๋‚ด ์ƒ๊ฐ์— SCons๋Š” Python์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„ˆ๋ฌด ๋Š๋ฆฌ์ง€๋งŒ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ „์ฒด ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ C++๋กœ ์ด์‹ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ํ•ด๋‹น ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด C++ ์Šคํฌ๋ฆฝํŠธ๋ฅผ JIT ์ปดํŒŒ์ผํ•˜๊ฒŒ ํ•˜๋ฉด ํ›จ์”ฌ ๋” ๋งŽ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋” ๋น ๋ฅด๊ฒŒ. ์•„๋งˆ๋„ ๋ชจ๋“  ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ๋งˆ์ฐฌ๊ฐ€์ง€์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ข‹์€ ์ƒ๊ฐ์ด์ง€๋งŒ meson์€ ๋Œ€๋ถ€๋ถ„์˜ ๊ณ„์ •์—์„œ ๋Š๋ฆฐ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜์ง€ ์•Š์ง€๋งŒ Python์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

GNOME ํ”„๋กœ์ ํŠธ๊ฐ€ ํ˜„์žฌ meson์„ ์œ„ํ•ด autotools๋ฅผ ํฌ๊ธฐํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— meson์ด ์ด๋ฒˆ ์ฃผ์˜ ํ’๋ฏธ๊ฐ€ ๋ ์ง€ ์˜์‹ฌ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ Scons๋Š” ํŒŒ์ด์ฌ์œผ๋กœ ์ž‘์„ฑ๋˜์–ด์„œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Š๋ฆฝ๋‹ˆ๋‹ค. make ๋˜๋Š” ninja์™€ ๊ฐ™์€ ์ง์ ‘ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด์ง€๋งŒ ์ •์˜๋ฅผ ์œ„ํ•ด ๋ง‰๋Œ€ํ•œ ์–‘์˜ XML์„ ์‚ฌ์šฉํ•˜๊ณ  ๋งŽ์€ ์–‘์˜ ์ฝ”๋“œ๊ฐ€ ์‹ค์ œ๋กœ XSLT ๋ณ€ํ™˜์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด Meson์€ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ข…์†์„ฑ ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ ๋‹ค์Œ ์ด๋ฅผ ๋‹Œ์ž ํŒŒ์ผ์— ๋คํ”„ํ•ฉ๋‹ˆ๋‹ค. ๋‹Œ์ž๊ฐ€ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์†์ด ๋น ๋ฆ…๋‹ˆ๋‹ค. ๋˜ํ•œ CMake์™€ ๊ฐ™์ด Meson์—์„œ ๋ชจ๋“  ๊ฒƒ์ด ๋ฌธ์ž์—ด์ธ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, C++๋กœ ์Šคํฌ๋ฆฝํŒ…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋ฐœ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ๋ช‡ ๊ฐœ ์žˆ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์ €๋Š” ์‹ค์ œ๋กœ ๊ทธ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.) ๊ทธ๋Ÿฌ๋‚˜ Godot์— ์•„์ง ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ์œผ๋กœ ์ด๋™ํ•˜๋„๋ก ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค( ๊ทธ๋ฆฌ๊ณ  ๋” ๋‚˜์œ ๊ฒƒ์€ ๋‚˜ ์ž์‹ ์ด ์“ฐ๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ)์ด ๊ฒธ์†ํ•˜์ง€ ์•Š์€ ๋‚ด ์˜๊ฒฌ์œผ๋กœ๋Š” ์•ฝ๊ฐ„ ์˜ค๋งŒํ•ฉ๋‹ˆ๋‹ค ;)

๋‚˜๋Š” ๋˜ํ•œ ํ˜„์žฌ ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์—์„œ ํŒŒ์ด์ฌ์ด ํ•„์ˆ˜๋ผ๋Š” ์ ์„ ๋˜ํ’€์ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ฉ”์†๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ํŒŒ์ด์ฌ์˜ pip ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•˜๊ฒŒ meson์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” SCons๋„ ๋Š๋ฆฌ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” @reduz์— ์™„์ „ํžˆ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

@slurps-mad-rips๊ฐ€ ๋งํ–ˆ๋“ฏ์ด :

Scons๋Š” python์œผ๋กœ ์ž‘์„ฑ๋˜์–ด์„œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Š๋ฆฝ๋‹ˆ๋‹ค.

๋‚จ์ž scons:

scons๋Š” ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋Š” ๋™์‹œ ์ž‘์—… ์ˆ˜๋ฅผ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋Š” -j ์˜ต์…˜์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๋Œ€์ƒ์„ ๋ณ‘๋ ฌ๋กœ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
scons -j 4

๋‚˜๋Š” 8c16t๊ฐ€ ์žˆ๋Š” CPU๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ "scons p=x11 -j 18"์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค.
"scons p=x11"์„ ๊ธฐ๋ณธ ์„ค์ •์ธ "-j 1"๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค 10๋ฐฐ ๋น ๋ฆ…๋‹ˆ๋‹ค.
2018๋…„์— ์‹ฑ๊ธ€ ์ฝ”์–ด CPU๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?
CPU๊ฐ€ ์™„์ „ํžˆ ์ž‘๋™ํ•˜๋„๋ก ํ•˜์‹ญ์‹œ์˜ค.
์‹œ๋„ํ•ด ์ฃผ์„ธ์š”.

๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ด๋ ‡๊ฒŒ ํฐ CPU๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ๋” ์ค‘์š”ํ•œ ๊ฒƒ์€ meson(๊ธ€์Ž„, ๋‹Œ์ž)์ด ์ฆ๋ถ„ ์žฌ์ปดํŒŒ์ผ์—์„œ ํ›จ์”ฌ ๋” ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Scons๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ MD5 ํ•ด์‹œ ํ•ฉ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. Godot๋Š” MD5-ํƒ€์ž„์Šคํƒฌํ”„ ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด๋Š” ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ์—๋งŒ ํŒŒ์ผ์„ ํ•ด์‹œํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ์›ƒ๊ธฐ๋‹ค.

๋” ๋‚˜์€ ๊ฒƒ์„ ์ฆ๋ช…ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์ƒˆ๋กœ์šด ๊ฒƒ์„ ์ž‘์„ฑํ•˜๊ณ  ๋ณด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค :)

Scons๋Š” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค, ํŠนํžˆ -j 1 ์ด์ƒ์˜ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๋Š” Windows ์‚ฌ์šฉ์ž์—๊ฒŒ ๋น ๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@slurps-mad-rips ํ”„๋กœ์ ํŠธ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋‹Œ์ž๋Š” ์†๋„๋ฅผ ๋„ˆ๋ฌด ๊ณผ์žฅํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค: http://david.rothlis.net/ninja-benchmark/. ์†Œ์Šค ํŒŒ์ผ์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. <20K์ด๋ฉด ํฐ ์ฐจ์ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@isaachier ๊ทธ ๋ฒค์น˜๋งˆํฌ๋Š” ninja์™€ scons๊ฐ€ ์•„๋‹ˆ๋ผ make์™€ ninja ์‚ฌ์ด์— ์žˆ์œผ๋ฏ€๋กœ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด ์šฉ์„œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ;)

๋” ๋‚˜์€ ๊ฒƒ์„ ์ฆ๋ช…ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์ƒˆ๋กœ ์ž‘์„ฑํ•˜๊ณ  ๋ณด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค :)

๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ž์ „๊ฑฐ๋ฅผ ํ˜๋ฆฌ๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋” ๋‚˜์€ ๋นŒ๋“œ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์˜๊ฒฌ์ด ์žˆ์œผ๋ฉด ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ๋” ๋‚ซ๋‹ค๋Š” ๊ฒƒ์„ ์ฆ๋ช…ํ•˜์„ธ์š”. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ด๊ฒƒ์€ ์˜๊ฒฌ์— ๋Œ€ํ•œ ํ† ๋ก ์ด๋ฉฐ ์•„๋ฌด๋ฐ๋„ ์ด๋Œ์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. @fire ๋Š” ์ด๋ฏธ https://github.com/godotengine/godot/issues/18518.

@slurps-mad-rips ya ์™„์ „ํžˆ ๋‹ค๋ฅธ ์ฃผ์ œ, SCons๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹จ์ง€ make vs. ninja๊ฐ€ ๋ฏธ์นœ ์ฐจ์ด๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค.

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

ํ˜„์žฌ ๋งŽ์€ ์ฝ”๋“œ์™€ ์ž‘์—…์ด scons ์Šคํฌ๋ฆฝํŠธ์— ์ง์ ‘ ๋ฐฐ์น˜๋˜์–ด ๋‹ค๋ฅธ ๋นŒ๋“œ ์‹œ์Šคํ…œ์œผ๋กœ ์ด๋™ํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ฃผ์žฅํ•˜๋Š” ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด scons์—์„œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ์กด python ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด meson, cmake ๋˜๋Š” bazel๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋นŒ๋“œ ์‹œ์Šคํ…œ์œผ๋กœ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ์ฝ”๋“œ ์ƒ์„ฑ์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ํŒจ์น˜๊ฐ€ ๋ณ‘ํ•ฉ๋œ ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. https://github.com/godotengine/godot/pull/17595 ํฌ๊ธฐํ•˜์ง€ ๋งˆ์„ธ์š”!

SCons ํ”„๋กœ์ ํŠธ ๊ณต๋™ ๊ด€๋ฆฌ์ž๊ฐ€ ์—ฌ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์ฐธ๊ณ  ์‚ฌํ•ญ:
1 - SCons๋Š” ํ™œ๋ฐœํžˆ ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ Github์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ ์ดํ›„๋กœ ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ ๋น„์œจ์ด ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
2 - null ์ฆ๋ถ„ ๋นŒ๋“œ ์‹œ๊ฐ„์˜ ์•ฝ 50%๋ฅผ ๋‹ด๋‹นํ•˜๋Š” SCons์˜ ๋ช‡ ๊ฐ€์ง€ ํŠน์ • ๋ถ€๋ถ„์„ ํ™•์ธํ–ˆ์œผ๋ฉฐ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ ๊ทน์ ์œผ๋กœ ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (Subst ๊ธฐ๋Šฅ)
3 - SCons 3.0์—์„œ Python 3.5+(2.7.x ํฌํ•จ)๋ฅผ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
4 - N๊ฐœ์˜ ๋‹ค๋ฅธ ๋นŒ๋“œ ์‹œ์Šคํ…œ์œผ๋กœ ์ด์‹ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๋Œ€์‹  SCons๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ์•ฝ๊ฐ„์˜ ์‹œ๊ฐ„์„ ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ์ด ๊ฐœ๋ฐœ์ž ์‹œ๊ฐ„์„ ๋” ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ œ์•ˆํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
5 - ์šฐ๋ฆฌ๋Š” 3.0.0 ๋ฐ 3.0.1์—์„œ ๋ฆด๋ฆฌ์Šค๋œ ์„ฑ๋Šฅ ๊ฐœ์„ ์˜ ์ผ๋ถ€ ๋‚ฎ์€ ํ–‰์ž‰ ๊ณผ์ผ์„ ์‹๋ณ„ํ•˜๊ณ  ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ null ์ฆ๋ถ„ ๋นŒ๋“œ๊ฐ€ 5-15% ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (ํŒŒ์ด์ฌ 2.7.x ๊ฐ€์ •)

ํ•ญ์ƒ ๊ทธ๋ ‡๋“ฏ์ด SCons ํ”„๋กœ์ ํŠธ๋Š” SCons๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋„์šธ ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ๊ณ  ๊ธฐ๊บผ์ด ๋„์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

SCons ๋ฐ Godot์— ๋Œ€ํ•œ ์ผ๋ถ€ "ํ†ต๊ณ„".

๋‚˜๋Š” ์˜ค๋Š˜๋‚  ์šฐ๋ฆฌ๊ฐ€ "๋ชจ๋‘" ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์„œ(i7s)๋ณด๋‹ค 2.4GHZ(๋ฐ ์‚ฌ์ดํด ์ˆ˜๋‹น ๋” ๋‚ฎ์€ ๋ช…๋ น์–ด)๋ฅผ ๊ฐ€์ง„ 2008๋…„ ์ •๋„์˜ 4์ฝ”์–ด CPU์ธ Q6600์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ์—ฌ์ „ํžˆ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค).

Q6600์—์„œ ๋นŒ๋“œ๋Š” 3๋ถ„์—์„œ 5๋ถ„(๋˜๋Š” ๊ทธ ์ด์ƒ์ด์ง€๋งŒ ์ •ํ™•ํ•œ ์ˆซ์ž๋Š” ๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š์Œ)์ด ์†Œ์š”๋˜์—ˆ์œผ๋ฉฐ, ๊ทธ ์ค‘ SCons๊ฐ€ ์ข…์†์„ฑ ๋ฐ ํ•ญ๋ชฉ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๋ฐ ~35-40์ดˆ๊ฐ€ ์†Œ์š”๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ค€๋น„ ์ž‘์—…)... ๋”ฐ๋ผ์„œ 80%์˜ ์‹œ๊ฐ„์ด cl.exe(MSVC ์ปดํŒŒ์ผ๋Ÿฌ) ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์†Œ์š”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์„ฑ๋Šฅ ๋ฐ ์ตœ์ ํ™” ์ธก๋ฉด์—์„œ, SCons(SCon์ด ์•„๋‹Œ ์‹ค์ œ๋กœ ํŒŒ์ด์ฌ)์—๋Š” ์˜ˆ์ƒ๋ณด๋‹ค ๋” ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š” ๋”์ฐํ•œ ํ”„๋กœ์„ธ์Šค ํ˜ธ์ถœ ์‹œ์Šคํ…œ์ด ์žˆ๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋„๊ตฌ๊ฐ€ ํ”„๋กœ์„ธ์Šค๋‹น ํ•˜๋‚˜์˜ ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š๊ณ (ํ˜„์žฌ SCons์™€ ๊ฐ™์ด) 1 ํ•˜๋‚˜์˜ ํŒŒ์ผ๋‹น ํ”„๋กœ์„ธ์Šค ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค(์ €๋Š” cl.exe ์ปดํŒŒ์ผ ๋‚ด๋ถ€ ๋ฐ ์‹œ์ž‘ ์˜ค๋ฒ„ํ—ค๋“œ์— ๋Œ€ํ•œ ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค). ๋” ๋น ๋ฅธ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋Š” ์•„๋งˆ๋„ ์ข…์†์„ฑ ํŠธ๋ฆฌ ๋‹จ๊ณ„ ๊ตฌ์ถ• ๋ฐ ๋ณต์žก์„ฑ์„ ์œ„ํ•œ ๊ธฐํƒ€ ์ค€๋น„ ์ž‘์—…์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. .

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” 5๋ถ„ ๋นŒ๋“œ ์ค‘ 35-40์ดˆ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(i7์—์„œ๋Š” ํ˜„์žฌ 3๋ถ„ ๋ฉ€ํ‹ฐ ์ฝ”์–ด ๋นŒ๋“œ์—์„œ 20์ดˆ ๋‹จ์ผ ์ฝ”์–ด ์„ค์ • ๋‹จ๊ณ„๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค).

์š”์•ฝํ•˜์ž๋ฉด, ์ œ ๊ธฐ์–ต์ด ๋งž๋‹ค๋ฉด 3~5๋ถ„์ด๋ฉด ์‹ค์ œ๋กœ 4์ฝ”์–ด ๋ฉ€ํ‹ฐ์ฝ”์–ด ๋นŒ๋“œ์ด๊ณ  ๋‹จ์ผ ์ฝ”์–ด ๋นŒ๋“œ์—๋Š” ์•ฝ 10๋ถ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค...

๋”ฐ๋ผ์„œ SCons๋ฅผ "์ตœ์ ํ™”"ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋นŒ๋“œ ์‹œ์ž‘์˜ ์ฒ˜์Œ 35์ดˆ๋ฅผ ๋‹ค์†Œ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค...

๊ทธ๊ฒƒ์€ SCons ๋Œ€ ๋‹ค๋ฅธ ๋” ๋น ๋ฅธ ๋นŒ๋“œ ์‹œ์Šคํ…œ๊ณผ ๊ด€๋ จํ•˜์—ฌ "์ตœ์ ํ™”"์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค... ๋ชจ๋“  obj ํŒŒ์ผ์— ๋Œ€ํ•ด ๋‹จ์ผ cl.exe๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜์—ฌ ์‹ค์ œ ์ปดํŒŒ์ผ์„ ์•ฝ๊ฐ„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ƒ๋‹นํ•ฉ๋‹ˆ๋‹ค(HDD๊ฐ€ ํ•ญ์ƒ ์‹ค์ œ IO ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ๋˜๋Š” ๊ฒƒ์ด ๋‘๋ ต์Šต๋‹ˆ๋‹ค(CPU๊ฐ€ ์•„๋‹˜). ์ด๋Š” SSD ์—†์ด๋Š” ํ”ผํ•  ์ˆ˜/์™„ํ™”ํ•  ์ˆ˜ ์—†์Œ)

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

๋”ฐ๋ผ์„œ "์ฆ๋ถ„ ๋นŒ๋“œ"๋Š” ๋‚ด ๊ธฐ์กด ์ปดํ“จํ„ฐ์—์„œ ์•ฝ 45์ดˆ์ด๋ฉฐ 2๋…„ ์ „ ๋ฉ์ฒญํ•œ ๋†ˆ์ด์—ˆ์„ ๋•Œ CPU ๋ฐ”์šด๋“œ์ผ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” IO ๋ฐ”์šด๋“œ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(HDD์—์„œ ์ˆ˜์ฒœ ๊ฐœ์˜ ํŒŒ์ผ ํ™•์ธ ) ์ „์ฒด ์ข…์†์„ฑ ์Šค์œ•/ํŠธ๋ฆฌ ์žฌ๊ตฌ์ถ•์˜ ๊ฒฝ์šฐ... ๋”ฐ๋ผ์„œ IO ๋ฐ”์ธ๋”ฉ๋œ ๊ฒฝ์šฐ "๋” ๋น ๋ฅธ buidlsystem"์ด ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค...

2๋…„ ์ „์˜ ๋‚ด ํ•ดํ‚น ์•„์ด๋””์–ด๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ "๊ฐ์‹œ์ž"๋ฅผ SCons์— ์—ฐ๊ฒฐํ•˜๊ณ  SCons๊ฐ€ ๋‹จ์ผ ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์„ ์‹คํ–‰ ๋ฐ ์žฌ์ปดํŒŒ์ผํ•˜๋„๋ก ํ•œ ๋‹ค์Œ(์ž๋™์œผ๋กœ ์ข…์†์„ฑ์ด๋ฏ€๋กœ) ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค์‹œ ๋งํฌํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค... ๋น„๋ก ์—ฐ๊ฒฐ์ด ์—ฌ์ „ํžˆ ์ „์ฒด ์ข…์†์„ฑ ์Šค์œ•์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜ค๋Š˜ ๊นจ๋‹ฌ์•˜์ง€๋งŒ... ์ฆ‰, ์ข…์†์„ฑ ํŠธ๋ฆฌ ์Šค์œ•/์žฌ๊ตฌ์ถ•์€ ์˜ต์…˜์œผ๋กœ ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ SCons๋Š” ์บ์‹œ๋œ dep ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค... ์•ฝ 15-20๊ฐœ๋ฅผ ์ ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค. 35์ดˆ ์‚ฌ์ „ ๊ณ„์‚ฐ ๋‹จ๊ณ„์˜ ์ดˆ(์ฒ˜์Œ 15์ดˆ๋Š” ํ”ผํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž„) ๋น„๋ก ๊ทธ๊ฒƒ์ด SCons์ฒ˜๋Ÿผ ํ•ญ์ƒ "์™„๋ฒฝํ•œ" ๋นŒ๋“œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ(๊ฐœ๋ฐœ์˜ ์ฆ๋ถ„ ๋นŒ๋“œ์—๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ... ์†๋„๊ฐ€ ๊ฐ€์น˜์žˆ๋Š” ์ ˆ์ถฉ์•ˆ).

์ด์ œ npm ๋ฐ npm watch... ๋˜๋Š” ํ˜„์žฌ ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ํ•ดํ‚นํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ถฉ๋ถ„ํ•œ ์ง€์‹์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๊ฑด ๋‚˜์ค‘์—, ๊ทธ๋ฆฌ๊ณ  ์‹œ๊ฐ„์ด ์žˆ์„ ๋•Œ(ํ˜„์žฌ๋Š” ์•„๋‹˜)์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ข€ ๊ธธ์–ด์ง€๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ ๋๋‚ด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋‹จ๋ฝ์˜ ์š”์ ์€ ์ œ๊ฐ€ ์ข‹์•„ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋‚™๋‹ด์‹œํ‚ค๊ธฐ๋ณด๋‹ค๋Š” (๋นŒ๋“œ ์‹œ์Šคํ…œ์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•œ๋‹ค๋ฉด ๊ณ„์†ํ•˜์‹ญ์‹œ์˜ค) "ํ†ต๊ณ„์ " ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Godot์˜ SCons์—์„œ ๋ช‡ ๊ฐ€์ง€๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ๊ณ„์‹  ๋ถ„๋“ค๊ป˜ ์œ ์šฉํ•œ ์ •๋ณด๊ฐ€ ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‚ด ํ†ต๊ณ„๋ฅผ ๋ณต์ œ/์žฌ์‹คํ–‰ํ•˜๋ ค๋ฉด ํ†ต๊ณ„ ์ •๋ณด(ํƒ€์ด๋จธ ํ•ญ๋ชฉ)๋ฅผ ์ผœ๊ณ  ์ข…์†์„ฑ ์žฌํ™•์‚ฐ์„ ๋„๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ SCons ๋ฌธ์„œ๋ฅผ ํƒ์ƒ‰ํ•˜์‹ญ์‹œ์˜ค("์‚ฌ์ „ ๊ณ„์‚ฐ"์˜ ์ฒ˜์Œ 20~30~35์ดˆ). )...

๋˜๋Š” ์•ฝ๊ฐ„ ๋œ ์ˆ˜๋™์ ์ธ ์†”๋ฃจ์…˜์˜ ๊ฒฝ์šฐ, ๋‹ค์Œ์œผ๋กœ ์ƒ์„ฑ๋œ ์ž๋™ํ™”๋œ VS ํ”„๋กœ์ ํŠธ์— ํƒ€์ด๋จธ ๋””๋ฒ„๊น… ์ •๋ณด๊ฐ€ ์ด๋ฏธ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(ํŽธ์ง‘: ํ™•๋ฅ ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ vs ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์— ๋Œ€ํ•œ ๋‹ฌ์ฝคํ•œ ์—…๋ฐ์ดํŠธ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‹จ๋ฝ์€ ์˜ค๋ž˜๋œ ์ •๋ณด์ผ ์ˆ˜ ์žˆ์Œ). SCons(SConstruct ํŒŒ์ผ ๋)... godot ์›น์‚ฌ์ดํŠธ์˜ "Windows ์ปดํŒŒ์ผ ํŠœํ† ๋ฆฌ์–ผ"์—์„œ VS ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ VS์—์„œ SCons๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Godot 3์—์„œ ํ…Œ์ŠคํŠธํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ ์ƒ์„ฑ๋œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค... ์˜ต์…˜์ด์ง€๋งŒ > log.txt์— scons๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋„ ๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์ž…๋‹ˆ๋‹ค(๋“ฑ) ...

๋ˆ„๊ตฐ๊ฐ€ ์ด ์ •๋ณด๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@Griefchief ์กฐ๊ธˆ ์ •๋ฆฌ

์‹ค์ œ๋กœ "null ์ฆ๋ถ„ ๋นŒ๋“œ"(์‹ค์ œ๋กœ ๋‹ค์‹œ ๋นŒ๋“œํ•  ํ•„์š”๋Š” ์—†์ง€๋งŒ scons๋Š” ์ „์ฒด ์ข…์†์„ฑ ํŠธ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ด๋ฅผ ๋ณด์žฅํ•ด์•ผ ํ•จ)๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ์ž‘์—… ์ค‘์ธ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

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

๋˜ ๋‹ค๋ฅธ ํ•ซ์ŠคํŒŸ์€ ํ˜„์žฌ cpickle๋กœ ๊ตฌํ˜„๋˜๊ณ  ํ•ญ์ƒ ์ „์ฒด์ ์œผ๋กœ ์ฝ๊ณ  ์“ฐ๋Š” sconsign ํŒŒ์ผ์„ ์ฝ๊ณ  ์“ฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์†๋„๋ฅผ ๋†’์ด๊ฑฐ๋‚˜ ๋” ์ฆ๋ถ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๊ฐœ์„ ์„ ์œ„ํ•ด ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค๋ฅผ ์‹œ์ฒญํ•˜์‹ญ์‹œ์˜ค.

์ฐธ๊ณ ๋กœ MSVC_BATCH๋ฅผ ์‹œ๋„ํ•˜์—ฌ Windows ๋นŒ๋“œ ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

MSVC_BATCH
true ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋ฉด SCons๊ฐ€ Microsoft Visual C/C++ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๊ฐœ์ฒด ํŒŒ์ผ์˜ ์ปดํŒŒ์ผ์„ ์ผ๊ด„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ์ถœ๋ ฅ ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€์ƒ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๋™์ผํ•œ ๊ตฌ์„ฑ ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜์—ฌ SCons์—์„œ ๊ตฌ์„ฑ๋œ ๋™์ผํ•œ ์†Œ์Šค ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ์†Œ์Šค ํŒŒ์ผ ์ปดํŒŒ์ผ์€ ์ปดํŒŒ์ผ๋Ÿฌ์— ๋Œ€ํ•œ ๋‹จ์ผ ํ˜ธ์ถœ๋กœ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค. ๊ฐœ์ฒด ํŒŒ์ผ์ด ๋นŒ๋“œ๋œ ์ดํ›„ ๋ณ€๊ฒฝ๋œ ์†Œ์Šค ํŒŒ์ผ๋งŒ ๊ฐ ์ปดํŒŒ์ผ๋Ÿฌ ํ˜ธ์ถœ์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค($CHANGED_SOURCES ์ƒ์„ฑ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด). ๊ฐœ์ฒด(๋Œ€์ƒ) ํŒŒ์ผ ๊ธฐ๋ณธ ์ด๋ฆ„(.obj ์ œ์™ธ)์ด ์†Œ์Šค ํŒŒ์ผ ๊ธฐ๋ณธ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ์ปดํŒŒ์ผ์€ ๋ณ„๋„๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค.

@bojidar-bg ์˜ˆ, ์˜ˆ, ์‹ค์ œ๋กœ ์ฆ๋ถ„ ๋นŒ๋“œ์— ๋Œ€ํ•ด์„œ๋„ ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํŒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :D

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

๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๋‹น์‹ ์˜ ์‹œ๊ฐ„์„ "๋‚ญ๋น„"ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹น์‹ ์—๊ฒŒ ํ•‘์„ ์น˜๊ณ  ์‹ถ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ๋งค์šฐ ๋ฐ”์˜๋‹ค))

์—ฌ๊ธฐ์— ์ž…๋ ฅํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@bdbaddog BD, ์ง€์›์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์— ์งˆ๋ฌธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

npm watch๋ฅผ ํŒŒ์ผ ์‹œ์Šคํ…œ(godot์˜ ์†Œ์Šค)์— ์—ฐ๊ฒฐํ•˜๊ณ  ์ •ํ™•ํžˆ ์–ด๋–ค ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ์•Œ๋ฉด SCons์— ์–ด๋–ค ์ด์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด์ œ npm watch๋ฅผ ํ†ตํ•ด scons๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํŒŒ์ผ์„ ํ‘ธ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค...

scons [godot ์˜ต์…˜] /file/that/was/changed.

์ด๊ฒƒ์€ ๋ถ„๋ช…ํžˆ Godot์˜ ์ „์ฒด dep ํŠธ๋ฆฌ๋ฅผ ํ”ผํ•˜๋ฉด์„œ ๊ทธ ํŒŒ์ผ์„ ์žฌ์ปดํŒŒ์ผํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ณ์€? ์ด์ œ dep tree traversal์€ 20์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ์ง€ ์•Š์ง€๋งŒ 1๊ฐœ ๋ฏธ๋งŒ์˜ ํ™•๋ฅ ๋กœ ๋ฐœ์ƒํ•˜์ง€๋งŒ 1๊ฐœ์˜ ์—…๋ฐ์ดํŠธ๋œ .obj ํŒŒ์ผ(๋˜๋Š” ๊ทธ ์ด์ƒ, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„)์„ ์–ป์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ๋Œ€ํ•ด ์ „์ฒด godot dep ํŠธ๋ฆฌ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ์ด ์˜ˆ์ œ์—์„œ ๋” ์ ์€ dep tree traversal์— ์ด์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด์ œ ๋‚ด๊ฐ€ ์ด์ ์ด ์žˆ๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด "๋‹จ์ˆœํ•œ" ์—ฐ๊ฒฐ ๋‹จ๊ณ„๋ฅผ ์œ„ํ•ด ์ „์ฒด ํŠธ๋ฆฌ ํƒ์ƒ‰์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ด ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ํ˜„์žฌ Scons์—์„œ ์ง€์›๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€๋งŒ(๋ชจ๋“  ๊ฒƒ์„ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋จ), ์‹ค์šฉ์ ์ด๊ณ  ์ด๋ก ์ ์ธ ๊ด€์ ์—์„œ ๋ชจ๋‘ ๋ฌป๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์บ์‹œ๋œ dep ํŠธ๋ฆฌ๊ฐ€ "dep tree๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ" ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(์žŠ์–ด๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค. 2๋…„์ด ์ง€๋‚ฌ์Šต๋‹ˆ๋‹ค). ์ผ๋ถ€ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋Š” ์ž‘๋™ํ•˜๋ฉฐ ํ•ด๋‹น ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์ƒˆ ํŒŒ์ผ์ด ์ถ”๊ฐ€๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ? (npm watch๋Š” ์ƒˆ ํŒŒ์ผ ์ถ”๊ฐ€์— ๋Œ€ํ•ด ๊ฒฝ๊ณ ํ•  ์ˆ˜ ์žˆ๊ณ  ๋‚ด๊ฐ€ ๊ฐ์ง€ํ•˜๋ฉด ์ „์ฒด ๊นŠ์ด ํŠธ๋ฆฌ ์ƒˆ๋กœ ๊ณ ์นจ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด "๊นŠ์ด ํŠธ๋ฆฌ ์ผ๊ด€์„ฑ ๋ณด์žฅ"์„ npm watch์™€ ๊ฐ™์€ ํŒŒ์ผ ๊ฐ์‹œ๊ธฐ๋กœ ๋‹ค์‹œ ํ‘ธ์‹œํ•˜๊ณ  ์ž๋™ํ™”ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ npm watch์™€ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์— ์ˆ˜๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•œ "์ข…์†์„ฑ ์บ์‹œ ์‚ฌ์šฉ" ์˜ต์…˜์„ ์ž…๋ ฅํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋‹Œ ์ผ๊ด€์„ฑ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•˜๊ฒŒ ํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ํŒŒ์ผ์„ ์ €์žฅํ•œ ์ˆœ๊ฐ„ "์‹ค์‹œ๊ฐ„"์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ, scons๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ์ œ๊ณตํ•จ)

๋‚ด ์ƒ๊ฐ์— ์ตœ์ ํ™”(์‹ค์ œ์ ์œผ๋กœ๋‚˜ ์ด๋ก ์ ์œผ๋กœ)๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‹ค๋ฅธ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๊นŒ(npm watch์™€ ๊ฐ™์€ ๊ฒƒ์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์™„๋ฒฝํ•œ ๋นŒ๋“œ๋ฅผ ๋ณด์žฅํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. )? ์กฐ์–ธ ๋ถ€ํƒ๋“œ๋ ค๋„ ๋ ๊นŒ์š”? ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์š”์•ฝํ•˜์ž๋ฉด ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

1) Godot์˜ ์†Œ์Šค ๋””๋ ‰ํ† ๋ฆฌ์—์„œ npm watch์™€ ๊ฐ™์€ filewatcher๋ฅผ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.
2) ์‚ฌ์šฉ์ž๊ฐ€ ์˜ค๋ž˜๋œ ํŒŒ์ผ์„ ์ €์žฅ/์ˆ˜์ •
3) scons๋Š” npm์— ์˜ํ•ด ํ•ด๋‹น ํŒŒ์ผ์— ๋Œ€ํ•ด ์ฆ‰์‹œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
4) ์ปดํŒŒ์ผ์ด ์„ฑ๊ณตํ•˜๋ฉด npm์€ scons์—๊ฒŒ ๋ง์ปค๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์‹คํ–‰ ํŒŒ์ผ์„ ์—ฐ๊ฒฐํ•˜๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค.

4.1) dep ํŠธ๋ฆฌ๊ฐ€ ์บ์‹œ๋œ ๊ฒฝ์šฐ(์ „์ฒด ๋นŒ๋“œ๊ฐ€ ์ด๋ฏธ ์‹คํ–‰๋œ ๊ฒฝ์šฐ) npm์€ ๋ง์ปค์— ์ด ์‹œ์ ์—์„œ ์บ์‹œ๋œ ๋ฒ„์ „์˜ dep ํŠธ๋ฆฌ์™€ ์—ฐ๊ฒฐํ•˜๋„๋ก ์ง€์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
4.1) ์บ์‹œ๋œ dep ํŠธ๋ฆฌ๊ฐ€ ๊ฐ์ง€๋˜์ง€ ์•Š์œผ๋ฉด npm watch๋Š” ์ „์ฒด Godot ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
4.2) ์ƒˆ ํŒŒ์ผ ์ถ”๊ฐ€์™€ ๊ฐ™์ด ์บ์‹œ ๋ฌดํšจํ™”๊ฐ€ ๊ฐ์ง€๋˜๋ฉด ์ „์ฒด dep ํŠธ๋ฆฌ ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค(npm์€ scons์™€ ํ•จ๊ป˜ "์บ์‹œ๋œ โ€‹โ€‹dep ํŠธ๋ฆฌ ์‚ฌ์šฉ" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค).

์ด๊ฒƒ์ด ์ œ ์•„์ด๋””์–ด๋ฅผ ์กฐ๊ธˆ ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ ๋ฌด์—‡์ด ๋ฌธ์ œ์ธ์ง€ ์•Œ๋ ค์ฃผ์„ธ์š” ;D

์ถ”์‹ : ์ด๊ฒƒ์ด "๋ช…๋ฐฑํ•œ" ๊ฒฐ๊ณผ์™€ ํ•จ๊ป˜ 35๊ฐœ์˜ null ์ฆ๋ถ„ ๋นŒ๋“œ์—์„œ 15์ดˆ๋ฅผ ์ค„์ธ ๋ช…๋ น์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค... ๊ธฐ๋ณธ์ ์œผ๋กœ ์—ฌ๊ธฐ์— ์„ค๋ช…๋œ ๋‚ด์šฉ์„ ์ž๋™ํ™”ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค(๋‹ค์†Œ ์ ๊ฑฐ๋‚˜, + scons์—๊ฒŒ ์ •ํ™•ํ•œ ํŒŒ์ผ์„ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ์–ด๋–ค ์‹์œผ๋กœ๋“  ๋„์›€์ด ๋˜๊ฑฐ๋‚˜ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์ˆ˜์ •๋จ):

https://www.scons.org/doc/latest/HTML/scons-user/ch06s04.html

๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ์— ๋ช‡ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(ํŠน๋ณ„ํ•œ ์ˆœ์„œ๋Š” ์—†์ง€๋งŒ yolo ๋•Œ๋ฌธ์— ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

1) ์ฆ๋ถ„ null ๋นŒ๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹Œ์ž ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๋„๊ตฌ์—์„œ ์•„๋ฌด ๊ฒƒ๋„ ์•„๋‹™๋‹ˆ๋‹ค. Chrome์—๋Š” AFAIK๊ฐ€ 2์ดˆ ๋ฏธ๋งŒ์˜ null ์ฆ๋ถ„ ๋นŒ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. npm watch ์•„๋ž˜์—์„œ 15์ดˆ๋กœ 35์ดˆ๊ฐ€ ๋–จ์–ด์ง€๋Š” ๊ฒƒ์€ meson ๋˜๋Š” cmake ๊ธฐ๋ฐ˜ Ninja ๋นŒ๋“œ์— ๋น„ํ•ด ์—ฌ์ „ํžˆ ๋งค์šฐ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. Ninja๋Š” ๋ช…๋ น์ค„์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋‹ค์‹œ ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ์ ์—์„œ Scons์™€ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค(make๋Š” ๋ฌผ๋ก  ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Œ).

2) CMake๋Š” ์ตœ๊ทผ CONFIGURE_DEPENDS ๋ฅผ glob ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. xcodebuild ๋ฐ msbuild์™€ ๊ฐ™์€ ๋„๊ตฌ๋Š” ์—ญ์‚ฌ์ ์œผ๋กœ(๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ) ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ณ€๊ฒฝ ๊ฐ์ง€๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ ๋ฐ˜๋Œ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Scons๊ฐ€ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์ ํŠธ์— ๊นŠ์ด ๋“ค์–ด๊ฐˆ ์‹œ๊ฐ„๋„ ์ธ๋‚ด์‹ฌ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  OS๋Š” ์ถ”๊ฐ€๋œ ํŒŒ์ผ, ์ˆ˜์ •๋œ ํŒŒ์ผ, ์ œ๊ฑฐ๋œ ํŒŒ์ผ ๋“ฑ ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์ฆ๋ถ„ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋ณ€๊ฒฝ๋œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ„๋‹จํžˆ ํ™•์ธํ•˜๊ณ  ์žฌ๊ตฌ์„ฑ ๊ฒ€์‚ฌ์—์„œ ๋ณ€๊ฒฝ๋œ ๋””๋ ‰ํ† ๋ฆฌ๋งŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ „์ฒด ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ ๋” ์ž‘์€ ๋น„ํŠธ๋ฅผ globbingํ•˜๋ฏ€๋กœ ์ˆ˜ํ–‰๋˜๋Š” ์ž‘์—…์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด Godot์— ๋„์›€์ด ๋˜๋Š”์ง€ ์—ฌ๋ถ€๋Š” ์•ฝ๊ฐ„์˜ ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ ๋„์›€์ด ๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ๋งŽ์€ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

3) Scons๊ฐ€ ๋” ๋งŽ์€ ๊ด€์‹ฌ์„ ๋ฐ›๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ์ข‹์€ ์ผ์ด์ง€๋งŒ, ๊ฐœ์ธ์ ์œผ๋กœ๋Š” Godot๊ฐ€ ๋” ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ์ปค๋ฎค๋‹ˆํ‹ฐ ์ „์ฒด์— ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” Scons๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์–ด๋–ค ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋„ Godot ๋ฐ–์—์„œ ์ƒ๊ฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. GNOME/GTK๋Š” ์ตœ๊ทผ meson์œผ๋กœ ์ด๋™ํ–ˆ์œผ๋ฉฐ(CMake ๊ฑด๋„ˆ๋›ฐ๊ธฐ) KDE๋Š” ๊ฝค ์˜ค๋žซ๋™์•ˆ CMake์— ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ผํ™”์ ์ธ ์ฆ๊ฑฐ(๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ์ ์ธ ํ™•์ฆ ํŽธํ–ฅ)์ด์ง€๋งŒ ๋‚˜๋Š” Godot๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€๋งŒ ๋‹ค์‹œ๋Š” scons๋ฅผ ๋งŒ์งˆ ํ•„์š”๊ฐ€ ์—†๋Š” C++ ๊ฐœ๋ฐœ์ž๋ฅผ ๋ช‡ ๋ช… ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถˆ์พŒํ•œ ๊ฒฝํ—˜์„ ์ œ๊ฑฐํ•˜์—ฌ ๊ฐœ๋ฐœ์ž์˜ ์ž…์— ๋‚จ์€ ์‹ ๋ง›์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์†”์งํžˆ Scons๊ฐ€ ์ตœ๊ณ ์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋˜๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ C++ ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์ด๋ฏธ ๊ธด ์ปดํŒŒ์ผ ์‹œ๊ฐ„์„ ์‹ซ์–ดํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธด ์ฆ๋ถ„ null ๋นŒ๋“œ(๋˜๋Š” 1๊ฐœ ํŒŒ์ผ์˜ ๊ธด ์ฆ๋ถ„ ๋นŒ๋“œ)๋Š” ํ˜„๋Œ€ ์„ธ๊ณ„์—์„œ ์•…๋ชฝ์ž…๋‹ˆ๋‹ค.

๋‹ค์‹œ ์‹œ๋„ํ•  ์˜ˆ์ •์ด์ง€๋งŒ ์ด๋ฅผ ์œ„ํ•ด CMake๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CMake์—์„œ meson์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์€ ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€ํ™˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋Š” meson ๋•๋ถ„์— ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค. CMake๋Š” ์ƒˆ๋กœ์šด FetchContent ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ข…์†์„ฑ์„ ์ข€ ๋” ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด codegen ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ณ„๋„์˜ ํŒŒ์ผ๋กœ ์˜ฎ๊ฒจ์ ธ์„œ ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ C++ ํ‘œ์ค€์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด target_compile_features(<target> (PUBLIC|PRIVATE|INTERFACE) cxx_std_<number>) ๋งŒํผ ๊ฐ„๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— CMake๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ ๋ชจ๋“  ๋นŒ๋“œ ์‹œ์Šคํ…œ ๊ด€๋ จ ํ•ญ๋ชฉ์€ ๋…ผ์Ÿ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์ง€๋งŒ ์‹œ๋„๋Š” ํ•ด๋ฅผ ๋ผ์น  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์†”์งํžˆ ๋งํ•ด์„œ (๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ๋ƒ‰๋‹ดํ•˜๊ฒŒ ๋“ค๋ฆด ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค) ์ €๋Š” Scons ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๊นŠ์ด ํŒŒ๊ณ ๋“ค๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ Python 2.7์ด ๊ณต์‹์ ์œผ๋กœ ๋งˆ์นจ๋‚ด ์™„์ „ํžˆ ์ข…๋ฃŒ๋˜๊ณ  ํ”„๋กœ์ ํŠธ๊ฐ€ Python 3.5 ์ด์ƒ์œผ๋กœ ๋‚˜์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” 2020๋…„ ์ดํ›„์—๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์„ ํ†ตํ•ด ์กฐ์‚ฌํ•˜๊ฑฐ๋‚˜ ๊ฐœ์„ ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ ์ „๊นŒ์ง€๋Š” ๋งŒ์ง€์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ Python 2.7์ด ๊ณต์‹์ ์œผ๋กœ ๋งˆ์นจ๋‚ด ์ฃฝ๊ณ  ํ”„๋กœ์ ํŠธ๊ฐ€ Python 3.5 ์ด์ƒ์œผ๋กœ ๋‚˜์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” 2020๋…„ ์ดํ›„์— ์กฐ์‚ฌํ•˜๊ฑฐ๋‚˜ ๊ฐœ์„ ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Scons 3๋Š” Python 3.5+๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. https://scons.org/tag/releases.html .

๋‚˜๋Š” Scons๋ฅผ ์–ด๋–ป๊ฒŒ ๊ทธ๋ ‡๊ฒŒ ์‹ซ์–ดํ•˜๊ณ  CMake๋ผ๋Š” ๊ตฌ์„ฑ ์—‰๋ง์„ ์ข‹์•„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ •๋ง๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋ผ๋ฉด ์ž์‹ ์˜ ๋นŒ๋“œ ์„ค์ •์„ ์ •์˜ํ•˜๊ธฐ์กฐ์ฐจ ์–ด๋ ต๊ณ  ์˜ต์…˜๊ณผ ์œ ํ˜•์ด ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋‚ด์ ์ธ ์ •์˜์ธ๋ฐ, ๋‚˜์—๊ฒŒ ๊ณ ํ†ต๋งŒ ๊ฐ€์ ธ๋‹ค์ฃผ์—ˆ๊ณ , Godot๊ฐ€ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ์‚ฌ์‹ค์— ๋‚˜๋Š” ์‹ค์ œ๋กœ ์•ˆ๋„ํ–ˆ๋‹ค.

์–ด์จŒ๋“  ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์ด ๋  ๊ฒƒ ๊ฐ™์œผ๋ฉด ๊ณ„์† ์‹œ๋„ํ•˜๊ณ  CMake์— ๋Œ€ํ•œ ๋‚ด ๊ฒฌํ•ด๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๋ผ๋ฉด ์ž์‹ ๋งŒ์˜ ๋นŒ๋“œ ์„ค์ •์„ ์ •์˜ํ•˜๊ธฐ์กฐ์ฐจ ํž˜๋“  ๊ณณ,

๊ทธ๊ฒƒ์ด ๋ฌป๋Š”๋‹ค๋ฉด CMake๊ฐ€ ์ž˜๋ชป ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋„๊ตฌ ์ฒด์ธ ์„ค์ •์€ ๋„๊ตฌ ์ฒด์ธ ํŒŒ์ผ์— ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ ํŠน์ • ๊ตฌ์„ฑ์€ ํ”Œ๋ž˜๊ทธ(๋˜๋Š” GUI ๋˜๋Š” ์บ์‹œ ํŒŒ์ผ ํŽธ์ง‘ ๋“ฑ)๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ๋ฌธ์„œํ™”๋˜๊ณ  ์ž…๋ ฅ๋˜๋ฉฐ ํ”„๋กœ์ ํŠธ ์ž‘์„ฑ์ž๋„ ๋…ธ์ถœ๋œ ๊ตฌ์„ฑ์„ ์ž˜ ๋ฌธ์„œํ™”ํ•˜๊ณ  ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CGold์™€ ์ตœ์‹  CMake ํ‘œ์ค€์„ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@Faless ์•„๋ฌด๋„ CMake ์–ธ์–ด๊ฐ€ ๋”์ฐ

@OvermindDL1 ์€ CGold๋ฅผ ์ฝ์œผ๋ผ๋Š” ์ œ์•ˆ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ๋ฌป๋Š”๋‹ค๋ฉด CMake๊ฐ€ ์ž˜๋ชป ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ธ€์Ž„, ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ž˜๋ชปํ•˜๊ณ ์žˆ๋Š” ๊ณณ์—์„œ ๋‚ด๊ฐ€ ๋งŒ๋‚œ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์„ ์ถ”์ธกํ•ฉ๋‹ˆ๋‹ค.

์†”์งํžˆ ๋งํ•ด์„œ, ๋‚˜๋Š” -DI_LOVE_CMAKE_AND_MAKE_DEFINES_LONG=on (์ •๋ง? on ?)๋ฅผ ํ†ตํ•ด ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ์‹ซ์–ดํ•ฉ๋‹ˆ๋‹ค. ์บ์‹œ ํŒŒ์ผ O_o ํŽธ์ง‘์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋Š” ๋งํ•  ๊ฒƒ๋„ ์—†์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋นŒ๋“œ ํด๋”๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์บ์‹œ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—)... ์ฆ๋ถ„ ๋นŒ๋“œ์˜ ๊ฒฝ์šฐ...

ํŽธ์ง‘: ๋˜ํ•œ ๋‚ด๊ฐ€ Scons์— ๋Œ€ํ•ด ์ •๋ง ์ข‹์•„ํ–ˆ๋˜ ๊ฒƒ(์ ์–ด๋„ Godot์—์„œ๋Š”, ๋ฌผ๋ก  ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ๋นŒ๋“œ ์‹œ์Šคํ…œ์—์„œ๋„ ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์Œ)์€ ์‹ค์ œ๋กœ ํ‘œ์ค€์ด๋‚˜ ๋ฌธ์„œ๋ฅผ ์ฝ์ง€ ์•Š๊ณ  scons -h ์‹คํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค

GitHub์—์„œ ๋ณธ ๋นŒ๋“œ ํŒŒ์ผ์˜ 95%๊ฐ€ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ๋นŒ๋“œ ์‹œ์Šคํ…œ์— ๊ฒŒ์œผ๋ฅด๋ฉฐ ํ™”๋ฌผ ์ˆญ๋ฐฐ ๊ด€ํ–‰์„ ๋”ฐ๋ผ ๋ฌด์–ธ๊ฐ€๋ฅผ ์—ฎ์Šต๋‹ˆ๋‹ค.

@isaachier , ๋ฉ”ํŠธ๋ฆญ์ฒ˜๋Ÿผ ๋‚˜์œ CMake ํŒŒ์ผ๊ณผ ์ข‹์€ CMake ํŒŒ์ผ์˜ ๋‘ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? https://github.com/ARMmbed/mbedtls/blob/development/CMakeLists.txt ?

๋‚ด๊ฐ€ ๋ณธ ๊ฒƒ๋ณด๋‹ค ๋‚ซ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ CMake >= 3.0์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ตœ์‹  CMake์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ์•„๋‹™๋‹ˆ๋‹ค.

๊ธ€์Ž„, ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ž˜๋ชปํ•˜๊ณ ์žˆ๋Š” ๊ณณ์—์„œ ๋‚ด๊ฐ€ ๋งŒ๋‚œ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์„ ์ถ”์ธกํ•ฉ๋‹ˆ๋‹ค.

์š”์ฆ˜์€ ์ž˜ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์š”.

์†”์งํžˆ ๋งํ•ด์„œ -DI_LOVE_CMAKE_AND_MAKE_DEFINES_LONG=on(์ •๋ง? on?)์„ ํ†ตํ•ด ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ์‹ซ์–ดํ•ฉ๋‹ˆ๋‹ค. ์บ์‹œ ํŒŒ์ผ O_o ํŽธ์ง‘์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋Š” ๋งํ•  ๊ฒƒ๋„ ์—†์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋นŒ๋“œ ํด๋”๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์บ์‹œ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—)... ์ฆ๋ถ„ ๋นŒ๋“œ์˜ ๊ฒฝ์šฐ...

on ์„ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†์œผ๋ฉฐ true , 1 ๋ฐ ๊ธฐํƒ€ ๋‹ค์–‘ํ•œ ๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋ž˜๊ทธ ์ด๋ฆ„๊ณผ ์ž˜ ์–ด์šธ๋ฆฌ๋Š” ์ ์ ˆํ•œ ๋ถˆ๋ฆฌ์–ธ ์ด๋ฆ„์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์˜ต์…˜์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋นŒ๋“œ ํด๋”๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. cmake๋Š” ํ•„์š”ํ•  ๋•Œ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ํƒ์›”ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ C/C++ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ๋งŒ์ง€๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์€ CGold ์™€ CMake์˜ ๊ณต์‹ ๋งค๋‰ด์–ผ์„ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ข…์ข…๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋งŽ์€ ์งง์€, CMake์˜ ๊ถŒ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ •๋ง ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ณ ๋Œ€ CMake2 ๋ฐฉ๋ฒ•๋ก ์„ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ CMake 2.x ๋ฒ„์ „์— ์˜์กดํ•˜๋Š” ์‚ฌ๋žŒ์€ ์ ˆ๋Œ€์ ์œผ๋กœ ์ž˜๋ชป๋œ ์ผ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(๋Œ€์ƒ ๋ฐ ๋„๊ตฌ ๋ชจ์Œ์„ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์˜ต์…˜์„ ์ œ๋Œ€๋กœ ์„ค์ •ํ•˜์ง€ ์•Š๋Š” ๋“ฑ...).

์„ค๋ช…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ €๋Š” ์—ฌ์ „ํžˆ ํšŒ์˜์ ์ด์ง€๋งŒ Godot์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ• ์ง€ ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. :).

@slurps-mad-rips C++11 ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•œ CMake ์˜ˆ์ œ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ๊ท€ํ•˜์˜ ๊ฒŒ์‹œ๋ฌผ์€ ๋‹ค์Œ์„ ํฌํ•จํ•˜์ง€๋งŒ ์ด์— ๊ตญํ•œ๋˜์ง€ ์•Š๋Š” ๋‹ค์–‘ํ•œ ์ด์œ ๋กœ ์ธํ•ด ์™„์ „ํžˆ ๋น„ํ‘œ์ค€ CMake์ž…๋‹ˆ๋‹ค.

  • ๋…ธ์ถœ๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๋„๊ตฌ ์ฒด์ธ์ด ์•„๋‹Œ ํŒŒ์ผ์— ์„ค์ •๋œ ๋„๊ตฌ ์ฒด์ธ ์ธ์ˆ˜.
  • C++11 ๋ชจ๋“œ ํ™œ์„ฑํ™”์™€ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ ˆ๋Œ€ ์•„๋‹™๋‹ˆ๋‹ค.
  • ๋ฌด๋Šฅํ•œ.

ํ•ด๋‹น ๊ฒŒ์‹œ๋ฌผ์— ํ‘œ์‹œ๋œ ์ž์ฒด ์„ค๋ช… ๋‹จ์ˆœํ™” ์ค‘๊ฐ„์ž ์ฝ”๋“œ๋ฅผ ๊ฐ์•ˆํ•  ๋•Œ:

cxx = meson.get_compiler('cpp')
# This is an extremely simplified approach. One can do a different option when dealing with MSVC and gcc support.
args = compiler.get_supported_arguments('-std=c++11', '-stdlib=libc++')
add_project_arguments(args)

๋™๋“ฑํ•œ ๋‹จ์ˆœํ™”(๋” ๋งŽ์€ ์†์„ฑ๋„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ) CMake๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

set_target_properties(godot PROPERTIES CXX_STANDARD 11)

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ์‚ฌ์šฉ๋œ ํˆด์ฒด์ธ์ด ํ•ด๋‹น ๋ชจ๋“œ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค(๋˜ํ•œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์‹คํŒจ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ). ๋นŒ๋“œ ํŒŒ์ผ์— ํŠน๋ณ„ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ๋ณ„ ๋ช…๋ น์ค„ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์€ ํˆด์ฒด์ธ ํŒŒ์ผ์—๋งŒ ์กด์žฌํ•ด์•ผ ํ•˜๊ณ  ์ด์ „ ๊ฒŒ์‹œ๋ฌผ์— ํ‘œ์‹œ๋œ meson ์˜ˆ์ œ๊ฐ€ ์‹ค์ œ๋กœ ํŠน์ • ์ธ์ˆ˜๋ฅผ ์ง€์ •ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋ณธ์งˆ์ ์œผ๋กœ ์ง€์›๋˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ•˜๋“œ์ฝ”๋”ฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฏ€๋กœ ๋งค์šฐ ์ข‹์ง€ ์•Š์€ ํ˜•์‹์ž…๋‹ˆ๋‹ค.

์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ๋„๊ตฌ ์ฒด์ธ(๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ MSVC, GCC/Clang, Android, iOS, emscripten ๋“ฑ... ๋“ฑ)์— ๋Œ€ํ•ด ๋ฏธ๋ฆฌ ๋นŒ๋“œ๋œ CMake ๋„๊ตฌ ์ฒด์ธ

ํŽธ์ง‘: ๊ทธ๋ฆฌ๊ณ  ๊ด‘๋ฒ”์œ„ํ•œ ์ง€์›์„ ๊ฒฐ์ฝ” ๋ฌด์‹œํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. KDevelop(๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” IDE, ํฅ๋ฏธ๋กญ๊ฒŒ๋„ CMake๋ฅผ ๋นŒ๋“œ ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์ง์žฅ์—์„œ ๊ฐ€๋” CLion์„ ์‚ฌ์šฉํ•˜๊ณ  CMake๋„ ์‚ฌ์šฉ)์„ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” meson์— ๋Œ€ํ•ด ์•„๋ฌด ๊ฒƒ๋„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Visual Studio!)๋Š” ์ด์ œ ๊ธฐ๋ณธ์ ์œผ๋กœ CMake ํ”„๋กœ์ ํŠธ๋ฅผ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์›ํ•˜๋Š” ๊ฒฝ์šฐ CMake๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ IDE์— ๋Œ€ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ์™ธ์—๋„)

@OvermindDL1

์ ˆ๋Œ€์ ์œผ๋กœ ๋น„ํ‘œ์ค€ CMake๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ฝ”๋“œ ์ƒ˜ํ”Œ์€ CXX_STANDARD ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ฒ„์ „์ธ CMake 3.0์„ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ์—์„œ cxx_std_ ๋ฐ ํ‘œ์ค€ ๋ฒˆํ˜ธ์™€ ํ•จ๊ป˜ target_compile_features ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ‘œ์ค€ ๋ฒ„์ „์„ ์„ค์ •ํ•˜๋Š” ์ƒˆ๋กญ๊ณ  ํ˜„๋Œ€์ ์ธ cmake ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. set_target_properties ๋Š” ์ด์ „์˜ ๋Œ€์ƒ๋ณ„ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
์‚ฌ์‹ค, CMake์˜ ๋ฌธ์„œ ์—์„œ ๊ฐ€์ ธ์˜จ ์ •ํ™•ํ•œ ์ฝ”๋“œ๋Š”

target_compile_features(mylib PUBLIC cxx_std_11)

๊ทธ๋Ÿฌ๋‚˜ CXX_STANDARD ๋Š” clang์ด ๊ตฌ์„ฑ๋˜์ง€ ์•Š๋Š” ํ•œ ๊ธฐ๋ณธ์ ์œผ๋กœ libstdc++๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— clang์— ๋Œ€ํ•œ libc++ ์ง€์›์„ ์„ค์ • -stdlib=libc++ ์ง€์›ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ํ‘œํ˜„์‹์„ ํ†ตํ•ด ์ปดํŒŒ์ผ๋Ÿฌ์— ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์™€ ๊ด€๋ จํ•˜์—ฌ ๋…ธ์ถœ๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์™€ ๊ด€๋ จ๋œ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋‹ค์Œ ์‹œ๋„์—์„œ Meson๋ณด๋‹ค CMake๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•  ๊ฒƒ์ด๋ผ๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ๋ช‡ ๋‹ฌ ์ „์— ์ž‘์„ฑํ•œ ๋Œ“๊ธ€์—์„œ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ“๊ธ€์„ ์‚ญ์ œํ•œ ๊ฒƒ์— ๋Œ€ํ•ด ๊ฐ์‚ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์žฌ์น˜๊ฐ€ ๋ถ€์กฑํ•˜๊ณ  ๋‚ด ์˜๊ฒฌ์œผ๋กœ๋Š” ๋Œ€ํ™”์— ์•„๋ฌด ๊ฒƒ๋„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

CMake 3.0์€ ๋” ์ด์ƒ ์ง€์›๋˜์ง€ ์•Š์„ ๋งŒํผ ์˜ค๋ž˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค(2014๋…„ 6์›” 10์ผ). ํ˜„์žฌ๋กœ์„œ๋Š” CMake 3.12๋ณด๋‹ค ์ตœ์‹  ๋ฒ„์ „์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ ํ˜„์žฌ๋กœ์„œ๋Š” CMake 3.10๋ณด๋‹ค ๋‚ฎ์€ ๋ฒ„์ „์„ ์‹คํ–‰ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์˜ˆ, ๋‹น์‹ ์ด ์ค€ ์˜ˆ๋Š” ์ „์ ์œผ๋กœ ๋ฐ˜๋Œ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค (CGold์กฐ์ฐจ๋„ ๊ทธ๋ ‡๊ฒŒํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์–ธ๊ธ‰ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค).

๊ทธ๋ฆฌ๊ณ  ์˜ˆ, ์ €๋Š” target_compile_features๋ฅผ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค. ^.^;

๊ทธ๋Ÿฌ๋‚˜ CXX_STANDARD๋Š” clang์ด ๊ตฌ์„ฑ๋˜์ง€ ์•Š๋Š” ํ•œ ๊ธฐ๋ณธ์ ์œผ๋กœ libstdc++๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— clang์— ๋Œ€ํ•œ libc++ ์ง€์›์„ ์„ค์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ๋Œ€๋ถ€๋ถ„์˜ Linux ๋ฐฐํฌํŒ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ libc++๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ง์ปค ์˜ค๋ฅ˜ ๋ฐ ABI ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค). ์ด๋•Œ ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ -stdlib=libc++๋ฅผ ์ง€์›ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ƒ์„ฑ๊ธฐ ํ‘œํ˜„์‹์„ ํ†ตํ•ด ์ปดํŒŒ์ผ๋Ÿฌ์— ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์™€ ๊ด€๋ จํ•˜์—ฌ ๋…ธ์ถœ๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์™€ ๊ด€๋ จ๋œ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ํˆด์ฒด์ธ์€ ๋ชจ๋‘ clang์— ๋Œ€ํ•ด ์ž˜ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ ์–ด๋„ C++14์—์„œ๋Š” (๊ทธ๋ฆฌ๊ณ  ๋ช‡ ๊ฐœ์˜ C++17๊ณผ ํ•จ๊ป˜) ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋‹ค์Œ ์‹œ๋„์—์„œ Meson๋ณด๋‹ค CMake๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•  ๊ฒƒ์ด๋ผ๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ๋ช‡ ๋‹ฌ ์ „์— ์ž‘์„ฑํ•œ ๋Œ“๊ธ€์—์„œ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ“๊ธ€์„ ์‚ญ์ œํ•œ ๊ฒƒ์— ๋Œ€ํ•ด ๊ฐ์‚ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์žฌ์น˜๊ฐ€ ๋ถ€์กฑํ•˜๊ณ  ๋‚ด ์˜๊ฒฌ์œผ๋กœ๋Š” ๋Œ€ํ™”์— ์•„๋ฌด ๊ฒƒ๋„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์ด๋•Œ ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ -stdlib=libc++๋ฅผ ์ง€์›ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ƒ์„ฑ๊ธฐ ํ‘œํ˜„์‹์„ ํ†ตํ•ด ์ปดํŒŒ์ผ๋Ÿฌ์— ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋„ค, ์ ˆ๋Œ€์ ์œผ๋กœ ์ง€๊ธˆ๊นŒ์ง€ ์ด์ œ๊นŒ์ง€ ๋นŒ๋“œ ํŒŒ์ผ์— ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค ํˆด์ฒด์ธ ํŒŒ์ผ์˜ ์ž‘์—…์ž…๋‹ˆ๋‹ค.

์ด์™€ ๊ด€๋ จํ•˜์—ฌ ๋…ธ์ถœ๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์™€ ๊ด€๋ จ๋œ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹จ์ง€ ๋‹จ์ผ ์œ„์น˜์˜ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์‚ฌ์šฉ๋œ ๋‹ค์Œ ์„ค์ •ํ•œ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ–ˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์–‘ํ•œ ์ด์œ ๋กœ CGold์—์„œ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

CMake 3.0์€ ๋” ์ด์ƒ ์ง€์›๋˜์ง€ ์•Š์„ ๋งŒํผ ์˜ค๋ž˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค(2014๋…„ 6์›” 10์ผ). ํ˜„์žฌ๋กœ์„œ๋Š” CMake 3.12๋ณด๋‹ค ์ตœ์‹  ๋ฒ„์ „์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ ํ˜„์žฌ๋กœ์„œ๋Š” CMake 3.10๋ณด๋‹ค ๋‚ฎ์€ ๋ฒ„์ „์„ ์‹คํ–‰ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋“ค์€ ํ•ด์„œ๋Š” ์•ˆ ๋˜์ง€๋งŒ ์ผ๋ถ€ ์žฅ์†Œ๋Š” ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ๊ธฐ์ˆ ๊ณผ ์ตœ์‹  ๊ธฐ์ˆ ์„ ์œ ์ง€ํ•˜๋ ค๋Š” ๊ฒŒ์ž„ ์—”์ง„์˜ ๊ฒฝ์šฐ ์ตœ์‹  CMake๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” 3.5์™€ ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” 3.4์™€ ๊ฐ™์€ ์ด์ „ ๋ฒ„์ „์—์„œ ๋ฉˆ์ถ˜ ๋งค์šฐ ํ™œ๋™์ ์ธ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์ž˜ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ์ž˜ ์•Œ๋ ค์ง„ ์ผ๋ถ€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ CMake 2.8์„ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค(SDL2, libssh2, libgit2 ๋“ฑ ์ฐธ์กฐ).

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

ํˆด์ฒด์ธ ํŒŒ์ผ์ด ์ž˜ ์ž‘์„ฑ๋˜์—ˆ๊ณ  ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์‹œ์Šคํ…œ๊ณผ ๋ชจ๋“  ๋ฒ„์ „์˜ CMake๋ฅผ ํฌํ•จํ•œ๋‹ค๋Š” ๊ฐ€์ •์„ ํ•˜๋Š” ๊ฒƒ์€ ํ˜„์žฌ์˜ ์ผ๋ฐ˜์ ์ธ C++ ์ƒํƒœ๊ณ„์— ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์†Œ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ๋œ libstdc ++ ๋˜๋Š” libc์˜ ++ ์šฉ์œผ๋กœ ์ปดํŒŒ์ผ ํ•  ์ˆ˜์žˆ๋Š” ์˜ต์…˜์€ (ํŠนํžˆ ํ†ตํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ FetchContent ํ˜ธ์ถœ) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜ํ•ด ์ œ๊ณต ๋  ํ•„์š”๊ฐ€์žˆ๋‹ค. CheckIncludeCXX ๋ฐ CheckCXXCompileFlag ์•„์ง ์กด์žฌํ•˜์ง€ ์•Š๋Š” GCC ์•„๋ž˜์— ์žˆ์ง€๋งŒ (๋ฐ˜๋Œ€ ๋ฐ ๋ถ€์‚ฌ์žฅ) ์—ฐํƒ€ ์•„๋ž˜์—์žˆ๋Š”์„ ์‹ฌ์ง€์–ด ์ผ๋ถ€ ํ”Œ๋ž˜๊ทธ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ์š” ๋ฌธ์ œ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํฌ๊ฒŒ ๊ฐˆ๋ผ์ง€๊ณ  ๊ณต๊ธ‰์—…์ฒด๊ฐ€ ํ˜ธํ™˜์„ฑ ์˜ต์…˜์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ฑฐ๋‚˜ ์‹ฌ์ง€์–ด ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๋Š” ๋Œ€์‹  ์šฐ๋ฆฌ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๊ฐœ๋ฐœ์ž์ธ ์šฐ๋ฆฌ์—๊ฒŒ ๊ทธ ๋™์ž‘์„ ๊ฐ•์š”ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹ ๋ขฐ ๋‚˜,์ด ํ–‰์„ฑ์— ์•„๋ฌด๋„ ๋” ๋‚˜๋ณด๋‹ค C ๋ฐ C ++ ๋นŒ๋“œ ์‹œ์Šคํ…œ๊ณผ ์˜์กด์„ฑ ๊ด€๋ฆฌ์˜ ์ƒํƒœ์— ๋Œ€ํ•œ ํ™”๊ฐ€,ํ•˜์ง€๋งŒ ํ•„์š” CMake์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ธฐ์กด์˜ ์‹ค์šฉ ์—†์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ์‹œ์Šคํ…œ์—์„œ CMake๋กœ ์ „ํ™˜ํ•  ๋•Œ ์ข‹์€ ์ ์€ ๊ฐ€์žฅ ์ตœ์‹ ์˜ ๊ธฐ๋Šฅ์œผ๋กœ ๊ฒŒ์ดํŠธ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ์˜ ์ •์ฒด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์•„๋ฌด๋„ ๋งŒ์ง€๊ธฐ๋ฅผ ์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(์ฝ”๋“œ ์ƒ์„ฑ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณ„๋„์˜ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ถ„๋ฆฌํ•œ ์šฉ๊ฐํ•œ ์˜ํ˜ผ ์ œ์™ธ). ๊ทธ๋Ÿฌ๋‚˜ ์†์—์„œ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋„๋ก ๋ช‡ ๊ฐ€์ง€ ์ž‘์—…์ด ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. (๊ทธ ์ด์œ ๋Š” ... ๋‚ด ๋ง์€ ๊ทธ๊ฒƒ์ด ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•ญ์ƒ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค)

ํŠนํžˆ CMake์—์„œ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ์‹ค์ œ๋กœ ์ฆ๊ธฐ๋Š” ์‚ฌ๋žŒ์€ ๋‚˜์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.).

ํˆด์ฒด์ธ ํŒŒ์ผ์ด ์ž˜ ์ž‘์„ฑ๋˜์—ˆ๊ณ  ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์‹œ์Šคํ…œ๊ณผ ๋ชจ๋“  ๋ฒ„์ „์˜ CMake๋ฅผ ํฌํ•จํ•œ๋‹ค๋Š” ๊ฐ€์ •์„ ํ•˜๋Š” ๊ฒƒ์€ ํ˜„์žฌ์˜ ์ผ๋ฐ˜์ ์ธ C++ ์ƒํƒœ๊ณ„์— ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค. clang์„ ์‚ฌ์šฉํ•  ๋•Œ libstdc++ ๋˜๋Š” libc++์šฉ์œผ๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ์˜ต์…˜(ํŠนํžˆ FetchContent ํ˜ธ์ถœ์„ ํ†ตํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ)์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๊ฒƒ๋“ค์€ ๋„๊ตฌ ์ฒด์ธ์ด ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ ์ฒด์ธ์— ์†์„ฑ์ด ์ „๋‹ฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋งค์šฐ ๋…ํŠนํ•œ ์„ค์ •์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋งค์šฐ ๋งž์ถคํ™”๋œ Android ๋นŒ๋“œ์™€ ๊ฐ™์€ ๋„๊ตฌ ์ฒด์ธ ํŒŒ์ผ์„ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด ์™„์ „ํžˆ ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค(cmake ๋„๊ตฌ ์ฒด์ธ์˜ ํ™•์žฅ๋œ ํด๋ฆฌ ์„ธํŠธ๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ํ•„์š”ํ•œ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค๋ฃจ์—ˆ์ง€๋งŒ).

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

์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ์ง€๊ธˆ CMake๋ฅผ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•œ ์ข‹์€ ํฌ์ธํŠธ์ž…๋‹ˆ๋‹ค. ์ข‹๋“  ๋‚˜์˜๋“  10๋…„ ์ด์ƒ์˜ ์ด์ „ ๊ฒฝํ—˜์„ ์ฒ˜๋ฆฌํ•œ ํ›„ ํ˜„์žฌ ์ž˜ ์ž‘๋™ํ•˜๋Š” ์ž˜ ์ •์˜๋œ ํ‘œ์ค€ ์„ธํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ CMake์—์„œ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ์‹ค์ œ๋กœ ์ฆ๊ธฐ๋Š” ์‚ฌ๋žŒ์€ ๋‚˜์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.).

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋‚˜์—๊ฒŒ ์˜๋ฏธ๊ฐ€ ์žˆ์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ๊ธธ๊ฒŒ ์ผ์ง€๋งŒ ๊ทธ๊ฒƒ์ด ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๋ฐ˜๋“œ์‹œ ํ•ด๋‹น๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ๋Œ€์•ˆ๊ณผ ๋น„๊ตํ•˜์—ฌ ํ™•์‹คํžˆ ๊ทธ๊ฒƒ์„ ์ฆ๊น๋‹ˆ๋‹ค. ^.^;

์ €๋Š” ์ง€๋‚œ ๋ช‡ ๋…„ ๋™์•ˆ ๋‹ค์–‘ํ•œ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•ด ์™”์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ์— ๋‚˜์—๊ฒŒ ๊ฐ€์žฅ ์˜๋ฏธ๊ฐ€ ์žˆ์—ˆ๋˜ ๊ฒƒ์€ CMake์ด์ง€๋งŒ SCons์˜ ๋งค๋ ฅ๊ณผ ๊ทธ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์œ ์—ฐํ•œ์ง€ ํ™•์‹คํžˆ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SCon์ด ์™„๋ฒฝํ•˜์ง€ ์•Š๋”๋ผ๋„(๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?) ์ถฉ๋ถ„ํžˆ ์ข‹์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๊นŒ?
  • ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๊นŒ?

SCons๊ฐ€ ๋‘ ํฌ์ธํŠธ ๋ชจ๋‘์— ๋Œ€ํ•ด "์ถฉ๋ถ„ํžˆ ์ข‹์€" ์ ์ˆ˜๋ฅผ ๋ฐ›์œผ๋ฉด ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.

SCons๋ฅผ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๊ต์ฒดํ•˜์ž๊ณ  ์ œ์•ˆํ•œ ์‚ฌ๋žŒ ์ค‘์— ์‹ค์ œ๋กœ Godot ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ฐฐ์šฐ๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•œ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํžŒํŠธ๋กœ, ๊ทธ๊ฒƒ์€ ์—„์ฒญ๋‚˜๊ฒŒ ๋ณต์žกํ•˜๊ณ  ๋งŽ์€ ์–‘์˜ ํ”Œ๋žซํผ์— ๋Œ€ํ•ด CMake ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์šฐ๋ฆฌ๊ฐ€ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์‹œ์— ์—ฌ๋Ÿฌ ๋นŒ๋“œ ๋Œ€์ƒ์„ ๊ตฌ์„ฑ/์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋งŽ์€(๋˜๋Š” ์–ด๋–ค) ํ”„๋กœ์ ํŠธ๋„ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

"์ €๋Š” Godot ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์ด์‹ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค"๋ผ๊ณ  ๋งํ•œ ์‚ฌ๋žŒ๋“ค์˜ ๋ชจ๋“  ๋…ธ๋ ฅ์€ SCons๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์˜ ๋ณต์žก์„ฑ์„ ๊นจ๋‹ซ๊ณ  ์ง€๊ธˆ๊นŒ์ง€ ๋น„์ฐธํ•˜๊ฒŒ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ ๊ทธ๊ฒƒ์€ ์ง€๊ธˆ๊นŒ์ง€ ์ž‘์—…์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์•„๋ฌด๊ฒƒ๋„ ๊ฐ€๊นŒ์ด์— ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์ด ๊ธฐ๋ณธ ์ปดํŒŒ์ผ ์‹œ๊ฐ„(SSD๊ฐ€ ์žˆ๋Š” ์ค‘๊ธ‰์—์„œ ๊ณ ๊ธ‰ ์‹œ์Šคํ…œ์—์„œ ๋‹จ 4/5์ดˆ)์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•œ๋‹ค๋ฉด, ๋จผ์ € Godot๊ฐ€ ๋นŒ๋“œํ•  ๋•Œ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์ดํ•ดํ•˜๊ณ  CMake ๋˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์„ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. .

๋‚˜๋Š” ์‚ดํŽด ๋ณด์•˜๋‹ค. CMake ๋˜๋Š” ๋‹ค๋ฅธ ๊ณณ์—์„œ ์‹คํ–‰ ์ทจ์†Œํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋˜ํ•œ ๊ฒŒ์œผ๋ฅด๋‹ค ;). ์šฐ๋ฆฌ๋Š” ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐ”์ ค ํฌํŠธ๋ฅผ ํ•œ ์‚ฌ๋žŒ์œผ๋กœ์„œ. ๋‚˜๋Š” Godot ํŽธ์ง‘๊ธฐ๊ฐ€ ์•„์ด์ฝ˜ ์—†์ด ์‹œ์ž‘๋˜๋Š” ์ง€์ ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

CMake๊ฐ€ ๊ทธ ์ง€์ ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

์ถ”์‹ . ํ”Œ๋žซํผ์ด ๋งŽ์€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฒฝ์Ÿ์ž ํ”„๋กœ์ ํŠธ๋Š” Urho3d์ž…๋‹ˆ๋‹ค.

Github Urho3d

cmake์—์„œ ๋‚ด bazel ๊ฒฐ๊ณผ๋ฅผ ์žฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/fire/godot/tree/cmake

Visual Studio 2017์ด ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

git clone https://github.com/fire/godot.git -b cmake
scons p=windows
Modify platform/register_platform_apis.gen.cpp
#include "register_platform_apis.h"

void register_platform_apis() {
}

void unregister_platform_apis() {
}

cmake ์„ค์น˜

choco install cmake ninja -y
# Open visual studio command prompt amd 64 2017 native
# Go to godot source directory
cd ..
mkdir build
cd build
cmake ../godot -GNinja
ninja

๊ฐ€์ง€๊ณ  ๋†€์•„์ฃผ์„ธ์š”. ํŽธ์ง‘๊ธฐ์—๋Š” bazel ๋นŒ๋“œ(์•„์ด์ฝ˜ ์—†์Œ)์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ ์ด ์ƒ˜ํ”Œ์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

godot_2018-08-03_21-44-57

๋ฉ”๋ชจ

  • ์•„์ด์ฝ˜์€ 71175b45f819e7cc5e4368dbf3e42abdd19af542๋ถ€ํ„ฐ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
  • ๋น„์ฃผ์–ผ ์Šคํฌ๋ฆฝํŠธ์™€ GDscript ์ž‘์—…

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

๋ฉ‹์ง„ ์ž‘ํ’ˆ @fire. ์—ฌ๊ธฐ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋นŒ๋“œ ์‹œ์Šคํ…œ์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค . ์ฆ‰,

์•ฝ๊ฐ„์˜ ์—…๋ฐ์ดํŠธ. ๋‚˜๋Š” ์˜ค๋Š˜ @fire ์˜ ์ž‘์—…์„ ์ง€์› ํ•˜๋ฏ€๋กœ ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ ๋” ๋งŽ์€ ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€์‹  ์‚ถ์„ ์ข€ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

@slurps-mad-rips SCons ์‹œ์Šคํ…œ์—์„œ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์€ SCons์—์„œ๋„ ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ ์ค‘์ธ ๋…ผ๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„ GIL์„ ์ค‘๋‹จํ•˜๊ณ  ๋นŒ๋“œ ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋•Œ๋กœ ๋ณ‘๋ ฌ๋กœ ๋นŒ๋“œํ•  ๋•Œ ์ผ๋ถ€ ํŒŒ์ผ ๋‹ซ๊ธฐ/์—ด๊ธฐ ๊ฒฝ์Ÿ ์กฐ๊ฑด์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค(์ข…์ข… ์ปจํ…์ŠคํŠธ์—์„œ ๋กœ ํŒŒ์ผ์„ ์—ด์–ด ํ•ด๊ฒฐ๋จ).

๋ชจ๋‘๋“ค ์•ˆ๋…•,

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

๋‚˜๋Š” ํƒˆ์„ ํ•œ๋‹ค. ๋‚˜๋Š” ์ปจํผ๋Ÿฐ์Šค์— ์ฐธ์„ํ•˜๋Š” ๋™์•ˆ ๋‹ค์Œ ์ฃผ ๋™์•ˆ CMake ํฌํŠธ์—์„œ ํœด์‹์„ ์ทจํ•ด์•ผ ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ ์—์„œ ๋‚˜์˜ ์ดˆ๊ธฐ ์ด์‹ ์‹œ๋„์˜ ๋…ธ๋ ฅ์„ ๋ณผ ์ˆ˜ CONFIGURE_DEPENDS ํŒŒ์ผ์„ Ninja์™€ ์„ž๋Š” ๊ฒƒ์€ ์‹ค์ œ๋กœ ๊ฝค ์ข‹์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ๋‹ค๋ฅธ CMake ํ”„๋กœ์ ํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๋ชจ๋“ˆ์ด ์œ ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ œ๊ฐ€ ์ž‘์„ฑํ•œ ๋„์šฐ๋ฏธ CMake ๋ชจ๋“ˆ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ตœ์‹  3.1 ์•ŒํŒŒ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ? ์•ŒํŒŒ๋Š” ์ข‹์€ ํ‘œ์ ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋นŒ๋“œ๋ฅผ ์‹œ๋„ ์ค‘์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์˜ ์ œ๋ชฉ์€ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ Meson์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค . ์—ฌ๊ธฐ์„œ CMake ํ† ๋ก ์„ ํ•˜๋Š” ๊ฒƒ์€ ๋ถ€์ ์ ˆํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. CMake์— ๋Œ€ํ•œ ํ† ๋ก ์—๋Š” ์ž์ฒด ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Meson๊ณผ ๋‹ค๋ฅธ ๊ฒƒ์˜ ๋น„๊ต๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

@zaniar ์ผ๋ฐ˜์ ์œผ๋กœ ๋นŒ๋“œ ์‹œ์Šคํ…œ๊ณผ ๊ด€๋ จํ•˜์—ฌ ์ด ์Šค๋ ˆ๋“œ์—์„œ ๋งŽ์€ ๋…ผ์˜๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ œ๋ชฉ์ด ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์•˜๋‹ค๊ณ  ํ•ด์„œ ๊ฐ‘์ž๊ธฐ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค๊ณ  ํ† ๋ก ์„ ์œ„ํ•œ ๋ชจ๋“  ๋งฅ๋ฝ์„ ์žƒ๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๋ช‡ ๊ฐœ์›” ์น˜์˜ ํ† ๋ก ์„ ๊ฐ‘์ž๊ธฐ ๋ฒ„๋ฆฌ๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์€ ๋ถ€์ ์ ˆํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@fire ์ง€๋‚œ ๋ช‡ ์ฃผ ๋™์•ˆ ์ผ๋กœ ๋ฐ”๋นด๊ณ  ๊ธˆ์š”์ผ์— ๋งˆ๊ฐ์ผ์ด ์ปธ๊ณ  ๊ทธ ์ดํ›„์—๋Š” ํฌํฌ๋ฅผ ์ตœ์‹  ์ •๋ณด๋กœ ์—…๋ฐ์ดํŠธํ•  ์‹œ๊ฐ„์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ์— ๋ช‡ ๊ฐ€์ง€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์–ด ํ‘ธ์‹œํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ์‹œ๊ฐ„์ด ์—†์Šต๋‹ˆ๋‹ค. (์ด ๋นŒ๋“œ ์‹œ์Šคํ…œ ํฌํŠธ, ๋‚ด gnu m4 ํฌํฌ, ์ด๋‹ฌ์˜ ๋งˆ์ง€๋ง‰ ์ฃผ์— C++ ํ‘œ์ค€ ์ƒŒ๋””์—๊ณ  ํšŒ์˜ ๋ฐ CppCon ์„ ์œ„ํ•ด ์ž‘์„ฑ ์ค‘์ธ 15๊ฐœ ์ œ์•ˆ์„œ ์‚ฌ์ด์— ๋‚˜๋Š” ์™„์ „ํžˆ ๋Šช์—

์˜ˆ, Meson์ด ์›๋ž˜ ํ† ๋ก  ๋Œ€์ƒ์ด์—ˆ์ง€๋งŒ ๊ทธ ์ดํ›„๋กœ ๋‹ค๋ฅธ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ๊ฑฐ๋ก ๋˜๊ณ  ๋…ผ์˜๋œ ๊ฒƒ์ด ์ž์—ฐ์Šค๋Ÿฌ์šด ์ผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. @slurps์™€ ๊ฐ™์ด ํผ๋œจ๋ฆฌ๋Š” ๋Œ€์‹  ์ด ๋ฌธ์ œ ๋‚ด์—์„œ ํ† ๋ก ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. -mad-rips๊ฐ€ ๋งํ–ˆ๋‹ค.

CMake๋กœ ์ด๋™ํ•˜๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ํˆด์ฒด์ธ์œผ๋กœ ๋งŽ์€ ์ง€์›์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Android ๋นŒ๋“œ๋Š” Godot๊ฐ€ '์œ ์ง€ํ•  ์ˆ˜ ์—†๋Š”' ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” SCsub ํŒŒ์ผ์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์— ๋น„ํ•ด ๋งค์šฐ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋กœ์„œ Godot๋Š” ์œ ์ง€ํ•˜๊ธฐ ์‰ฝ๊ณ  ๊ธฐ์—ฌ์ž๋“ค์ด ๋” ์ž˜ ์•Œ๊ณ  ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

๋˜ํ•œ ์ผ๋ฐ˜ ๋ชจ๋“ˆ์€ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์—”์ง„์„ ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅํ•œ ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก #19486๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‹ค์ œ๋กœ ์ด๊ฒƒ๋“ค์„ ๋‹ค๋ฃจ๊ณ  ์žˆ๋‹ค. ๊ณง ์žˆ์„ C++ ํ‘œ์ค€ ํšŒ์˜์ธ CppCon์œผ๋กœ ๋ฐ”์˜๊ณ  ์ง์žฅ์—์„œ ๋‹ค์Œ ์ฃผ์— ๋ฆด๋ฆฌ์Šค๋ฅผ ํ•  ์˜ˆ์ •์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๋™์•ˆ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฏธ๋ฃจ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํฌํŠธ๋ฅผ ์™„๋ฃŒํ•  ์‹œ๊ฐ„์ด ๋งŽ์ง€ ์•Š์•˜์ง€๋งŒ ์•ž์œผ๋กœ C++ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” python ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋ฐ ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ์ฃผ๋ง์— ํ•ญ๊ตฌ์—์„œ ์ž‘์—…์„ ์žฌ๊ฐœํ•˜๊ธฐ๋ฅผ ํฌ๋งํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ž๋™์œผ๋กœ ํƒ€์‚ฌ ์ข…์†์„ฑ์„ ํš๋“ํ•˜๊ณ  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ €์žฅ๋œ ํŒจ์น˜๋ฅผ ์ ์šฉํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ํ‰๊ฐ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ•ต์‹ฌ ๊ฐœ๋ฐœ์ž๋ฅผ์œ„ํ•œํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ ์งˆ๋ฌธ ํ•˜๋‚˜๊ฐ€ ์กฐ์ง์˜ ๊ธฐ๋ณธ REPO์—์„œ ์ž์‹ ์˜ ์ €์žฅ์†Œ์—์žˆ๋Š” ๋ชจ๋“  THIRD_PARTY REPOS์„ ๊นจ๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ FetchContent ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ํ˜„์žฌ ์•ฝ๊ฐ„ ๋ถ„๊ธฐ๋œ ์ด๋Ÿฌํ•œ ํƒ€์‚ฌ ์ข…์†์„ฑ์— ๋Œ€ํ•ด ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐ ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ด์‹๋˜๋ฉด ์ฝ”์–ด ์ €์žฅ์†Œ์— ์ฆ๋ถ„ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์‹œ์— cmake ํŒŒ์ผ์„ ์ •๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ฐจ๋ก€๋กœ ๊ฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์—”์ง„ ์ž์ฒด๋„ ๋ชจ๋“ˆํ™”ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์›ํ•  ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ€ ๊ธฐ์ˆ ์ ์œผ๋กœ ์„œ๋กœ ๋ณ„๋„๋กœ ์—…๋ฐ์ดํŠธ๋  @chanon์ด ์–ธ๊ธ‰ํ•œ ๋ฌธ์ œ๋ฅผ

๋งˆ์ง€๋ง‰์œผ๋กœ ํ•ต์‹ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‹œ์Šคํ…œ์—์„œ ๋ฐœ๊ฒฌ๋˜๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ๋นŒ๋“œ ๋„๊ตฌ์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. clang-format, clang-tidy, ccache ๋˜๋Š” sccache, distcc, clang-check, ์ฃผ์†Œ ์ƒˆ๋‹ˆํƒ€์ด์ €, ubsanitizer, ์Šค๋ ˆ๋“œ ์ƒˆ๋‹ˆํƒ€์ด์ € ๋“ฑ๊ณผ ๊ฐ™์€ ๊ฒƒ ๊ฐ์ง€ํ•˜๊ณ  ์žˆ์Œ)์„ ์„ ํƒ์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ sccache ๋˜๋Š” ccache๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋นŒ๋“œ ๊ฐ„์— ์ „ํ™˜ํ•  ๋•Œ ๋˜๋Š” ๊ทธ ๋ฐ˜๋Œ€๋กœ ์ „ํ™˜ํ•  ๋•Œ ์•ฝ๊ฐ„์˜ ๋นŒ๋“œ ๊ฐœ์„ ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. CMake 3.13์ด ์ถœ์‹œ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์€ ๋‚ด๊ฐ€ ์˜์กดํ•ด์•ผ ํ–ˆ๋˜ ๋ช‡ ๊ฐ€์ง€ ๋ฒˆ๊ฑฐ๋กœ์šด ์ž‘์—…์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์„ ๊ฒƒ์ด์ง€๋งŒ ์ค‘์š”ํ•œ ๊ฒƒ์€ ํ˜„์žฌ "์‹œ์ž‘ํ•˜๊ธฐ" ์›Œํฌํ”Œ๋กœ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋˜๋„๋ก ์„ค์ •ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Python 3.5 ์ด์ƒ์„ ํ†ตํ•ด pip install ๋ฅผ ๊ณ„์† ์‹คํ–‰ํ•˜๋ ค๋ฉด virtualenv ๋‚ด๋ถ€์— ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ๋žŒ๋“ค์ด ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์„ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. (์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋‹ค์–‘ํ•œ ์ฝ”๋“œ ์ƒ์„ฑ ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ์ข…์†์„ฑ์œผ๋กœ ์ถ”๊ฐ€ python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ—˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋‚˜์ค‘์— ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค)

์•„๋ฌดํŠผ ๊ฐ‘์ž‘์Šค๋Ÿฌ์šด ์—…๋ฐ์ดํŠธ ์†Œ์‹์— ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ํ•ญ๊ตฌ๋ฅผ ์™„์„ฑํ•˜๋Š” ๋ฐ ์ „๋…ํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ตœ๊ทผ์— ์‚ถ์ด ๋ฐฉํ•ด๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜…

๋‚˜๋Š” ๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ FetchContent์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ํ˜„์žฌ ์•ฝ๊ฐ„ ๋ถ„๊ธฐ๋œ ์ด๋Ÿฌํ•œ ํƒ€์‚ฌ ์ข…์†์„ฑ์— ๋Œ€ํ•ด ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋˜ํ•œ Hunter ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Godot ํŠน์ • ์ฝ”๋“œ ์ €์žฅ์†Œ(์˜ˆ๋ฅผ ๋“ค์–ด github์™€ ๊ฐ™์€ ํŠน๋ณ„ํ•œ git repo)๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฑด๋ฌผ, ์บ์‹œ ๋“ฑ์„ ํ•„์š”์— ๋”ฐ๋ผ ์ ์ ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋ชจ๋“  ์ข…์†์„ฑ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋˜๋Š” ๋ชจ๋“  ์ข…์†์„ฑ์„ '๋ฉ”์ธ' Hunter ํŒจํ‚ค์ง€ ์ €์žฅ์†Œ์— ์ œ์ถœํ•˜๊ณ  ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค). Hunter๋Š” ๋‹จ์ผ cmake ํŒŒ์ผ(HunterGate.cmake)์ด๋ฉฐ ํŒจํ‚ค์ง€ ์ €์žฅ์†Œ ์ •๋ณด(๊ณต์‹ ํŒŒ์ผ์ด๋“  ์‚ฌ์šฉ์ž ์ •์˜ ํŒŒ์ผ์ด๋“ )๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ์ด ํŒŒ์ผ์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

๊ฒธ์†ํ•œ ์š”์ฒญ: ์ด ๋ฌธ์ œ์˜ ๋Œ“๊ธ€ ์Šค๋ ˆ๋“œ๊ฐ€ ์—„์ฒญ๋‚˜๊ฒŒ ์ปค์กŒ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ

์—ฌ๋Ÿฌ๋ถ„, ์•ˆ๋…•ํ•˜์„ธ์š”. ์ €๋Š” ์ž‘์€ ๊ฒŒ์ž„์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋‹ค์Œ ์—”์ง„์œผ๋กœ Godot๋ฅผ ์‚ฌ์šฉํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ๋Œ€ํ™”๋ฅผ ๋ณด์•˜๊ณ  CMake์™€ Meson(๊ทธ๋ฆฌ๊ณ  autotools, tup, plain make, waf, SCons, ์ด ๋ชจ๋“  ๋„๊ตฌ์—์„œ ์ „์ฒด ํ”„๋กœ์ ํŠธ ์‹œ๋„...)์— ๊ฒฝํ—˜์ด ์žˆ๋Š” ์‚ฌ๋žŒ์œผ๋กœ์„œ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋” ์ง‘์ค‘์ ์œผ๋กœ ์‚ฌ์šฉํ•œ ์‹œ์Šคํ…œ์€ Autotools, CMake ๋ฐ Meson์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ํ”„๋กœ๋•์…˜ ์„ค์ •์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ํ๊ธฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง€๋‚œ ๋ช‡ ๋…„ ๋™์•ˆ Meson๊ณผ CMake๋ฅผ ์‚ฌ์šฉํ•ด ์™”์Šต๋‹ˆ๋‹ค.

cmake์˜ ์žฅ์ 

  • Visual Studio(Meson์ด ์š”์ฆ˜์—๋Š” ์ž˜ ์ง€์›ํ•˜์ง€๋งŒ ์ตœ๊ทผ์—๋Š” ์‹œ๋„ํ•˜์ง€ ์•Š์•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค) ๋ฐ ํŠนํžˆ XCode(์—ฌ๊ธฐ์„œ ๋” ๋ถ€์กฑํ•˜๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค)์— ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ์„ฑ์ˆ™ํ•œ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ๊ธฐ.
  • ํญ๋„“์€ ์ฑ„ํƒ, IDE์—์„œ ๋” ๋งŽ์€ ์ง€์›
  • ํญ๋„“์€ ์ฑ„ํƒ -> ๊ธฐ์—ฌ๋ฅผ ์–ป๊ธฐ๊ฐ€ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค(Meson์€ ๋ฐฐ์šฐ๊ธฐ ์‰ฝ์ง€๋งŒ ๋งํ•ด์•ผ ํ•จ)

๋ฉ”์†์˜ ์žฅ์ 

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งŽ์€ ์œ ์šฉํ•œ ๋Œ€์ƒ: ์ƒˆ๋‹ˆํƒ€์ด์ €, Unity ๋นŒ๋“œ ๋ฌด๋ฃŒ, ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ํ—ค๋” ๋ฌด๋ฃŒ, ์ ์šฉ ๋ฒ”์œ„ ๋ฌด๋ฃŒ...
  • ๋ฌธ์„œ๋Š” CMake ๋ฌธ์„œ์—์„œ ์—‰๋ฉ์ด๋ฅผ ๊ฑท์–ด์ฐจ: http://mesonbuild.com/
  • ํฌ๋กœ์Šค ์ปดํŒŒ์ผ์ด ํ›จ์”ฌ ์‰ฝ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.
  • Meson์€ ๊ฐ๊ฐ์˜ ์ผ์„ ํ•˜๋Š” ๋ถ„๋ช…ํ•œ ๋ฐฉ๋ฒ•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋Š ๊ฒƒ์„ ์„ ํƒํ• ๊นŒ์š”? ๊ต์ฐจ ์ปดํŒŒ์ผ์ด ์ง‘์ค‘์ ์ด๊ณ  ๋น ๋ฅธ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ๊ฒฝ์šฐ Meson์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ์ ์œผ๋กœ Unity ๋นŒ๋“œ ๋ฐ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ํ—ค๋”๊ฐ€ ์ง€์›๋จ).
CMake๊ฐ€ ํ‘œ์ค€์ด๊ณ  ๊ธฐ์—ฌ๊ฐ€ ํŒ€์— ์ค‘์š”ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ €๋Š” CMake๋ฅผ ๊ณ ๋ คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” Meson์„ ๊ฐœ์ธ์ ์œผ๋กœ ์„ ํƒํ•  ๊ฒƒ์ด์ง€๋งŒ ๊ทธ๊ฒƒ์€ ๋‹จ์ง€ ๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋„๊ตฌ๊ฐ€ ํ›จ์”ฌ ๋” ์ข‹๊ณ  ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(CMake ์Šคํฌ๋ฆฝํŒ…, ๊ณต๊ฐ„ ์ฒ˜๋ฆฌ, ์ƒ์„ฑ๊ธฐ ํ‘œํ˜„์‹ ๋“ฑ... ๋‹น์‹ ์„ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค).

์•„๋ž˜์—์„œ ์ด๋Ÿฐ ๋ป”๋ป”ํ•œ ์ž๊ธฐ ํ™๋ณด๋ฅผ ํ•ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค๋งŒ, ๋งฅ๋ฝ์ด ๊ทธ๊ฒƒ์„ ๊ตฌ๊ฑธํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ถ๊ธˆํ•œ ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด ์—ฌ๊ธฐ์— ์•ฝ๊ฐ„์˜ ๊ธฐ๋ณธ์ ์ธ Meson์— ๋Œ€ํ•œ ์ผ๋ จ์˜ ๊ธฐ์‚ฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(4๊ฐœ ๊ธฐ์‚ฌ).

StackOverflow์˜ ๋นŒ๋“œ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ (์•ฝ๊ฐ„ ์˜ค๋ž˜๋œ) ์‘๋‹ต์ด ์žˆ์Šต๋‹ˆ๋‹ค.

https://stackoverflow.com/questions/5837764/autotools-vs-cmake-for-both-windows-and-linux-compilation/24953691#24953691

๊ทธ๋ƒฅ ๋‚ด 2 ์„ผํŠธ :)

@germandiago ๊ทธ๊ฒƒ์€ ํ›Œ๋ฅญํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค -- ์ €๋Š” ์ด ๋ฌธ์ œ๋ฅผ ์ž ์‹œ ๋™์•ˆ ์ถ”์ ํ•ด ์™”์œผ๋ฉฐ ์Šฌํ”„๊ฒŒ๋„ CMake ์ „์šฉ์ธ godot + CLion์œผ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ›Œ๋ฅญ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ, ๋Œ€๋ถ€๋ถ„์˜ ์ตœ์‹  IDE๋Š” CMake ์ „์šฉ ๋ฐ/๋˜๋Š” ์ผ๋ถ€ ์‚ฌ์šฉ์ž ์ •์˜ ๋นŒ๋“œ ์‹œ์Šคํ…œ ๋ฐ/๋˜๋Š” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์žƒ๋Š” '์›์‹œ ํ˜ธ์ถœ'์ž…๋‹ˆ๋‹ค. CMake๋Š” ๊ฐ€์น˜๊ฐ€ ์žˆ๋“  ์—†๋“  ์ •๋ง ํ‘œ์ค€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@dorkbox ๋‚ด๊ฐ€ ์ž‘์—… ์ค‘์ธ ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ถ„๋ช…ํžˆ CLion(cmake + ninja) ์›Œํฌํ”Œ๋กœ์—์„œ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@germandiago

์ €๋Š” CppCon 2018์„ ๊ธฐ์ค€์œผ๋กœ meson์˜ ์ €์ž์™€ ์ด์ œ ์‹ค์ œ๋กœ ์นœ๊ตฌ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(๋‹ค์†Œ ๐Ÿ˜›). ์šฐ๋ฆฌ๋Š” ๋‘˜ ๋‹ค "Remember Fortran"์ด๋ผ๋Š” ์ œ๋ชฉ์˜ ๋ชจ๋“ˆ์— ๊ด€ํ•œ ๋‹ค์Œ ํšŒ์˜์—์„œ ๊ฐ™์€ ๋…ผ๋ฌธ์„ ๋ณด๊ณ  ๋ฐœํ‘œํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ๊ทธ ํšŒ์˜์—์„œ ๊ทธ์˜ ๋…ผ๋ฌธ(์‚ฌ์‹ค์€ ๋‹ค์Œ ์ฃผ์ž…๋‹ˆ๋‹ค!)๊ณผ ์šฐ๋ฆฌ๋Š” CppCon์—์„œ ๊ฐ™์€ ๋นŒ๋“œ ์‹œ์Šคํ…œ ํŒจ๋„์— ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ค‘๊ฐ„์ž๋ฅผ ์‚ฌ์šฉ ์‹ถ์–ด์š”. ์Šค๋ ˆ๋“œ์—์„œ ๋” ์ž์„ธํžˆ ์ฝ์–ด๋ณด๋ฉด ์ค‘๊ฐ„์ž ํฌํŠธ๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋‹น์‹œ์—๋Š” ์ƒํ™ฉ์ด Scons์™€ ๋„ˆ๋ฌด ํ†ตํ•ฉ๋˜์–ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ์ „ํžˆ ํ˜„์žฌ ์ฝ”๋“œ ์ƒ์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณ„๋„์˜ '์‹คํ–‰ ๊ฐ€๋Šฅํ•œ' ์Šคํฌ๋ฆฝํŠธ๋กœ ๊บผ๋‚ด๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋ฏธ๋ž˜์— Meson์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž‘์—… ์†๋„๊ฐ€ ๋Š๋ฆฌ๊ณ  scons๋ฅผ ์™„์ „ํžˆ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ ์ƒ์„ฑ์„ ๋•๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ jinja ํ…œํ”Œ๋ฆฟ์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋‚ด ๊ณต๊ฐœ ํฌํฌ๋Š” ๊ตฌ์‹์ด์ง€๋งŒ ์ง‘์— ์žˆ๋Š” ํฌํฌ๋Š” ์กฐ๊ธˆ ๋” ์•ž์„œ ์žˆ์Šต๋‹ˆ๋‹ค(๊ฐœ์ธ ํฌํฌ์™€ ๋™๊ธฐํ™”๋จ). ๋ถˆํ–‰ํžˆ๋„ ์ผ์ด ๋ฐฉํ•ด๊ฐ€ ๋˜์—ˆ๊ณ  ์ƒŒ๋””์—๊ณ ๋Š” ๋ถˆํ–‰ํžˆ๋„ ๋‚ด ์‹œ๊ฐ„์„ ๋” ๋งŽ์ด 'ํ›”์น ' ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ ํ›„์—๋Š” ๊ฐœ์ธ ํฌํฌ์— ์žˆ๋Š” ์ผ๋ถ€ ๋กœ์ปฌ ์‹คํ—˜์„ ์ž์œ ๋กญ๊ฒŒ ์ œ๊ฑฐํ•˜๊ณ  ๋งˆ์นจ๋‚ด Godot cmake ๊ธฐ์ฐจ์— ๋‹ค์‹œ ์˜ฌ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์›Œํฌํ”Œ๋กœ ํ”„๋กœ์„ธ์Šค์— ํฐ ์ง€์žฅ์„ ์ฃผ์ง€ ์•Š์œผ๋ฉด์„œ ์ „์ฒด ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๊ฐ€ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์ตœ์„ ์„ ๋‹คํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

(์ œ์ณ๋‘๊ณ  : ์ธ๋‚ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๋ชจ๋‘ ๋‹น์‹ ์€ ํ–ˆ์–ด ๋™์•ˆ์ด์— ๋‚ด๊ฐ€ ์ž‘์—… ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‹œ์ž‘ํ•œ ์ดํ›„ ๋™์•ˆ์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค ๊ฒƒ์„ ์•Œ๊ณ ,ํ•˜์ง€๋งŒ ๋‚œ ์ด์ œ ++์€ C์˜ ๋ฏธ๊ตญ ๊ตญ๋ฆฝ ๋ฐ”๋”” ๋‚ด ์ผ์ •์„ ๊ธฐ์ค€์œ„์›ํšŒ๋ฅผ ๊ณ ์šฉ์ฃผ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ํŠนํžˆ ๋ชจ๋“ˆ, ์ฝ”๋ฃจํ‹ด ๋ฐ ๋ฒ”์œ„์™€ ๊ฐ™์€ ์ค‘์š”ํ•œ ์ฃผ์ œ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์ตœ๊ทผ์— ์ข€ ๋” ๊ฝ‰ ์ฐจ ์žˆ์Šต๋‹ˆ๋‹ค.)

์˜ˆ, ๋Œ€๋ถ€๋ถ„์˜ ์ตœ์‹  IDE๋Š” CMake ์ „์šฉ ๋ฐ/๋˜๋Š” ์ผ๋ถ€ ์‚ฌ์šฉ์ž ์ •์˜ ๋นŒ๋“œ ์‹œ์Šคํ…œ ๋ฐ/๋˜๋Š” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์žƒ๋Š” '์›์‹œ ํ˜ธ์ถœ'์ž…๋‹ˆ๋‹ค. CMake๋Š” ๊ฐ€์น˜๊ฐ€ ์žˆ๋“  ์—†๋“  ์ •๋ง ํ‘œ์ค€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

IDE์—์„œ meson์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์œ ์šฉํ•œ ๋„๊ตฌ:

https://github.com/prozum/meson-cmake-wrapper

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

๋ช‡ ๊ฐ€์ง€ ๋ฐฐ๊ฒฝ: ์ €๋Š” (10?) ๋…„ ๋™์•ˆ CMake์˜ ์—ด๋ ฌํ•œ ์ง€์ง€์ž์˜€์ง€๋งŒ ์ž‘๋…„ ์ •๋„์— meson๊ณผ ์‚ฌ๋ž‘์— ๋น ์กŒ์Šต๋‹ˆ๋‹ค. Meson์€ CMake์˜ ์„ฑ๊ฐ€์‹  ๋งŽ์€ ๋ถ€๋ถ„์„ ์ˆ˜์ •/๋ฐฉ์ง€ํ•˜๋ฉด์„œ CMake์˜ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๋ ค๋Š” ์˜๋„๋กœ ์ž‘์„ฑ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ meson์„ ์ฑ„ํƒํ•˜๋Š” ๋ฐ ์ง๋ฉดํ•˜๊ณ  ์žˆ๋Š” ํ•œ ๊ฐ€์ง€ ์žฅ์• ๋ฌผ์€ IDE ์ง€์›์ž…๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ ์œ„์˜ ๋„๊ตฌ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์œผ๋ฏ€๋กœ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ๋นŒ๋“œ ์‹œ์Šคํ…œ์—๋Š” ์ฃผ์š” ๊ฒฐํ•จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์ƒ์€ ๊ธฐ์ˆ ์ ์ธ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ scons, autotools, cmake, meson ๋˜๋Š” make vs ninja ์ข…๊ต๊ฐ€ ๋ฌด์—‡์ด๋“  ๋ณ€๊ฒฝํ•  ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ๋นŒ๋“œ ์‹œ์Šคํ…œ ๋ณ€๊ฒฝ ๋ฒ„๊ทธ๋ฅผ ์ด ๋ฒ„๊ทธ์˜ ๋ณต์ œ๋กœ ๋‹ซ๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

<reduz> iFire: no, you did not, all you did was build it but did not port any of the dozens of custom scripts that generate code
<iFire> reduz: the other person worked on the little python script generation on her branch
<iFire> so they directly imported the python env
<iFire> it's workable
<reduz> iFire: that is what everyone said that attempted it, and failed :P
<reduz> there are too many things in there

reduz๊ฐ€ ์ž˜๋ชป๋œ @slurps-mad-rips :).

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

@lazybullfrog ๋ฐ์Šคํฌํƒ‘๊ณผ ์—ฌ๋Ÿฌ ๋ชจ๋ฐ”์ผ ์žฅ์น˜์šฉ์œผ๋กœ ์•ฝ 5๊ฐœ์˜ ๊ฐœ๋ณ„ ์ปดํ“จํ„ฐ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. cmake์— ๋Œ€ํ•œ ๋‚ด ํฌํŠธ์˜ ์ผ๋ถ€๋Š” ํ˜„์žฌ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ cmake ๋„๊ตฌ ์ฒด์ธ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@slurps-mad-rips ํ•˜์ด์ฟ  ์ค‘ ํ•˜๋‚˜์ธ๊ฐ€์š”? ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๊บผ์ด ํ…Œ์ŠคํŠธ๋ฅผ ๋•๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”.

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

ํ”Œ๋žซํผ์šฉ cmake ๋„๊ตฌ ๋ชจ์Œ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ https://github.com/ruslo/polly์— ๋ฏธ๋ฆฌ ๋นŒ๋“œ๋œ ๋„๊ตฌ ๋ชจ์Œ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์—†๋Š” ๊ฒฝ์šฐ PRํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. :-)

@slurps-mad-rips ์–ด๋–ป๊ฒŒ ๋œ ๊ฑด๊ฐ€์š”? 1์›” 14์ผ์— ์ฝ”๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. Windows์—์„œ ์ปดํŒŒ์ผ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ pkgconfig๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

@fire life๋Š” ๋‚ด ๋ฐฉ์‹๋Œ€๋กœ ์ปค๋ธŒ๋ณผ ๋ช‡ ๊ฐœ๋ฅผ ๋˜์ง€๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๊ณ  ๋‚ด๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ๊ฐœ์ธ์ ์ธ ๋ฌผ๊ฑด. ๋‚˜๋Š” ์ž‘์—…์— ์ง‘์ค‘ํ•˜๊ณ  Godot์— ๋ณต์‚ฌ๋˜๋Š” ์ž‘์—…์˜ ์–‘์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” IXM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์šด ์ข‹๊ฒŒ๋„ ์ €๋Š” ์ผ์ฃผ์ผ ํ›„์— ํœด๊ฐ€๋ฅผ ๊ฐ€๋ฏ€๋กœ(์ด๋ฒˆ ์ฃผ๋ง์— ์—ด๋ฆฌ๋Š” WG21 ISO ํšŒ์˜๋ฅผ ์œ„ํ•ด Kona๋กœ ํ–ฅํ•ฉ๋‹ˆ๋‹ค) ์ด์— ๋Œ€ํ•ด ์ž‘์—…ํ•  ์—ฌ๊ฐ€ ์‹œ๊ฐ„์ด ์žˆ๊ณ  (์ž˜ํ•˜๋ฉด!) macOS, Linux ๋ฐ Windows ๊ณงโ„ข์šฉ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๋นŒ๋“œ์ž…๋‹ˆ๋‹ค. Android์™€ iOS, FreeBSD์™€ Haiku(๋ฏธ์•ˆํ•ฉ๋‹ˆ๋‹ค @lazybullfrog , ์ผ์ฐ/์ž์ฃผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์„ ํ™˜์˜ํ•˜์ง€๋งŒ)๋Š” ๊ทธ ๋‹ค์Œ์œผ๋กœ ์ €์˜ ๋‹ค์Œ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

@slurps-mad-rips, ์ธ์ƒ์€ ๋‚˜์—๊ฒŒ๋„ ๋ช‡ ๊ฐœ์˜ ์ปค๋ธŒ ๋ณผ์„ ๋˜์กŒ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์šฐ๋ฆฌ๋Š” ์•ผ๊ตฌ ํŒ€์„ ์‹œ์ž‘ํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜‚

๋‹คํ–‰์Šค๋Ÿฝ๊ฒŒ๋„ ๋‚ด๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์–ธ๊ธ‰ํ•œ ์ดํ›„๋กœ ๊ทธ ์ปค๋ธŒ ๋ณผ ์ค‘ ํ•˜๋‚˜๋Š” Haiku ๋ฐ FreeBSD๊ฐ€ ์„ค์น˜๋œ 32GB ๋žจ์ด ์žˆ๋Š” 8์ฝ”์–ด Xeon์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ณง ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์‹œ๊ฐ„์„ ๊ฐ–๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋‘ ํ”Œ๋žซํผ์ด ๋ชจ๋‘ ์ฃผ๋ชฉ์„ ๋ฐ›๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด ์ •๋ง ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๊ณง ํ…Œ์ŠคํŠธ๋ฅผ ๊ธฐ๋Œ€ํ•˜์‹ญ์‹œ์˜ค.

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

์ƒํ™ฉ์ด ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด Bazel ํฌํŠธ์— ๊ธฐ๊บผ์ด ๊ธฐ์—ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

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

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

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

๋ˆ„๊ตฐ๊ฐ€ _์ •๋ง__ ๋‹ค๋ฅธ ์˜ต์…˜์„ ์กฐ์‚ฌํ•˜๊ธฐ๋ฅผ ์›ํ•˜๊ณ , ์ตœ์ข… ๊ฒฐ๊ณผ๊ฐ€ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์žˆ๊ณ , ์ž˜ ์ง€์›๋˜๊ณ  ํฐ ๋‹จ์  ์—†์ด ๋ถ€๊ฐ€๊ฐ€์น˜๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ๊ณ ๋ คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ CMake ํฌํŠธ๋กœ ํ•ด์˜จ ์ผ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ scons์—์„œ no-op ๋˜๋Š” ๋‹จ์ผ ํŒŒ์ผ ๋ณ€๊ฒฝ์€ ํ˜„์žฌ ์ปดํ“จํ„ฐ(64GB RAM, ์œ ์‚ฌํ•œ ํ”„๋กœ์„ธ์„œ ๋“ฑ์ด ์žˆ์Œ)์—์„œ 10์ดˆ ์ด์ƒ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ninja + cmake๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ „์ฒด ๊ตฌ์„ฑ + ์ƒ์„ฑ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋” ์ ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๊ณ  ๋นŒ๋“œ๋Š” ๋ฌด์ž‘๋™ ๋นŒ๋“œ์—์„œ 0.2์ดˆ ์ด๋‚ด์— ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค(ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘์— ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” Windows์—์„œ). ๋˜ํ•œ mozilla์˜ sccache ๋„๊ตฌ๊ฐ€ ์„ค์น˜๋œ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” codegen ๋ถ€๋ถ„์„ ํŽธ์ง‘ํ•˜๊ฑฐ๋‚˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ์žฌ์ƒ์„ฑ๋œ ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋‚ด ๋กœ์ปฌ ํ™˜๊ฒฝ์— ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ์—†๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

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

๋ฐฉ๊ธˆ ์—ฌํ–‰์—์„œ ๋Œ์•„์™€์„œ ์•ฝ๊ฐ„์˜ ์ž‘์—…์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ ๋‹น์žฅ์€ ์ˆ˜๋™ scons ์‹คํ–‰์—์„œ ๋ช‡ ๊ฐœ์˜ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•ด์•ผ ํ•˜์ง€๋งŒ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ƒ์„ฑ๋œ ์†Œ์Šค๋ฅผ ์กฐ๊ธˆ์”ฉ ์ž˜๋ผ๋‚ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. license.gen.h ๋ฐ method_bind.inc ํ—ค๋”๊ฐ€ ํ˜„์žฌ ๊ฐ€์žฅ ํฐ ๋ชฉํ‘œ์ด์ง€๋งŒ ์‹œ์ฐจ๋กœ ์ธํ•œ ํ”ผ๋กœ์™€ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฉฐ์น ์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.

(๋˜ํ•œ ๊ทธ๋Š” ์ด ์ง„ํ–‰ ์ƒํ™ฉ์— ์ž ์‹œ ๊ด€์‹ฌ์ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—

๋‚ด ๊ฒฝํ—˜์— ๋”ฐ๋ฅด๋ฉด Meson์€ Windows์—์„œ Android๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ์™„์ „ํžˆ ์—‰๋ง์ด ๋˜์–ด ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(libepoxy) ์ค‘ ํ•˜๋‚˜๋ฅผ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๊ตฌ์ฒด์ ์ธ ์ปดํŒŒ์ผ๋Ÿฌ์— ๋„ˆ๋ฌด ๋งŽ์ด ๋ฌถ์—ฌ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์€ ๋นŒ๋“œ ๋ช…๋ น๊ณผ ๋ณ„๋„๋กœ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

ํŒŒ์ผ์— ๋Œ€ํ•œ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋Š” ์ƒˆ ๋ถ„๊ธฐ๋ฅผ ์ฒดํฌ์•„์›ƒํ•  ๋•Œ๋งˆ๋‹ค ๋ช…๋ น์ค„์—์„œ Scons๋ฅผ ์‹คํ–‰ํ•˜์—ฌ vsproj ํŒŒ์ผ์„ ์žฌ์ƒ์„ฑํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์–ด์จŒ๋“  ์ „์ฒด ๋นŒ๋“œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ณธ Scons์—๋Š” ์–ด๋–ค ์ข…๋ฅ˜์˜ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋‹จ๊ณ„๋„ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋˜ํ•œ clang-tools์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ฆ‰์‹œ ์ปดํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ, Windows์—์„œ Godot๋ฅผ ์ฝ”๋”ฉํ•˜๋Š” ์œ ์ผํ•œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜(IDE-wise)์€ Visual Studio๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•  ์ค€๋น„๋ฅผ ํ•˜์‹ญ์‹œ์˜ค.

Scons๋Š” ํ›Œ๋ฅญํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์ด์ง€๋งŒ 12์ฝ”์–ด ์“ฐ๋ ˆ๋“œ๋ฆฌํผ์™€ 128GB ๋žจ์ด ์žˆ๊ณ  ํ•œ ์ค„ ๋ณ€๊ฒฝ์„ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•ด Windows์—์„œ 12์ดˆ ์ด์ƒ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ(๋Œ€๋ถ€๋ถ„ Scons๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค), ์•ฝ๊ฐ„ ์งœ์ฆ์ด ๋‚ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ Scons์˜ ์‹ค์ œ ๋‹จ์ (๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ๊ฒ€์ƒ‰์— ๊ฒŒ์œผ๋ฅธ ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Œ)์€ ๊ฐœ๋ณ„ cpp ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ „์ฒด ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜์ง€ ์•Š๊ณ  ๊ฐœ๋ณ„ cpp ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ƒ์‚ฐ์„ฑ์„ ํฌ๊ฒŒ ๋†’์ด๊ณ  ์˜จ์ „ํ•œ ๊ฒ€์‚ฌ๊ธฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ๋ผ์ธ ๋ณ€๊ฒฝ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋นŒ๋“œํ•  ๊ฒƒ์ด ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•˜๋Š” ๋ฐ๋„ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค...

2cs

git-bash์—์„œ ์‹คํ–‰:

$ time scons -j24 num_jobs=24 vsproj=true platform=windows
scons: Reading SConscript files ...
Configuring for Windows: target=debug, bits=default
 Found MSVC version 14.2, arch amd64, bits=64
YASM is necessary for WebM SIMD optimizations.
WebM SIMD optimizations are disabled. Check if your CPU architecture, CPU bits or platform are supported!
Checking for C header file mntent.h... no
scons: done reading SConscript files.
scons: Building targets ...
[Initial build] progress_finish(["progress_finish"], [])
[Initial build] scons: done building targets.

real    0m16.082s
user    0m0.000s
sys     0m0.030s

๋‹จ์ผ ๋Œ€์ƒ ํŒŒ์ผ๋งŒ ๋นŒ๋“œํ•˜๋ ค๋ฉด ๋ช…๋ น์ค„์—์„œ ์ง€์ •ํ•˜์‹ญ์‹œ์˜ค.

scons -j24 num_jobs=24 vsproj=true platform=windows <path  to targetfile>/targetfile.obj

CMake์˜ ์ตœ์‹  ๋ฒ„์ „์€ ์ด์ „์— ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋กœ ์–ธ๊ธ‰ํ•œ ๋ˆ„๋ฝ๋œ ๊ธฐ๋Šฅ ์ค‘ ์ผ๋ถ€๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๋ง๋ถ™์ด๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.
Unity ๋นŒ๋“œ: https://cmake.org/cmake/help/latest/prop_tgt/UNITY_BUILD.html
๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ํ—ค๋”: https://cmake.org/cmake/help/latest/command/target_precompile_headers.html

@Nosliwnayr ๋‘˜ ๋‹ค ์ˆ˜๋…„ ๋™์•ˆ ์• ๋“œ์˜จ์— ์˜ํ•ด ์ง€์›๋˜์–ด ์™”์œผ๋ฉฐ ์ž˜ ํ…Œ์ŠคํŠธ๋˜์—ˆ์œผ๋ฉฐ ์ด์ œ ํฌํ•จ๋˜๊ธฐ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์•„์ฃผ ์˜ค๋žซ๋™์•ˆ CMake์—์„œ ๋‘˜ ๋‹ค ํ•  ์ˆ˜ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— CMake๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์ด์œ ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

@bdbaddog
์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋‹จ์ผ ํŒŒ์ผ์„ ์ˆ˜๋™์œผ๋กœ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ .obj๋Š” ๋ฌด์—‡์„ ํ•ฉ๋‹ˆ๊นŒ?
์ „์ฒด ํ”„๋กœ์ ํŠธ์— ์–ด๋–ป๊ฒŒ ์ ์šฉํ•ฉ๋‹ˆ๊นŒ? ๊ฐœ๋ณ„ ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๊นŒ?


๋‚˜๋Š” ์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ๋” ์ตœ์ ํ™”๋  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์•„๋ฌด ํŠธ๋ฆญ ์—†์ด ๊ฑฐ์˜ ์ฆ‰์‹œ C++ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์‹ ์˜ ์„ ๋ฌผ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค - Godot๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋นจ๋ฆฌ ์ปดํŒŒ์ผ๋˜๋Š”์ง€ ํ™•์ธํ•œ ํ›„, ์ €๋Š” ์ •๋ง ์–ธ๋ฆฌ์–ผ ์—”์ง„ 4๋กœ ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•ด ๊ณ ๊ตฐ๋ถ„ํˆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(์ปดํŒŒ์ผ , 45๋ถ„์ด ๊ฑธ๋ ธ์ง€ ๋งŒ ์ด์ œ ์—”์ง„์ด ์–ด๋–ป๊ฒŒ ๋“  ๋” ๋ถ€ํ’€์–ด ์˜ค๋ฅด๊ณ  ์ตœ๋Œ€ 60 ๋ถ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๋ฏธ์นœ ๋“ฏ์ด์š”)

๋‚ด ๋ง์€ Godot๊ฐ€ ํ›จ์”ฌ ๋” ๋น ๋ฅด๊ฒŒ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋Š” ์ž ์žฌ๋ ฅ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์ง์ ‘ ๊ต์ฒดํ•  ๊ฒƒ์ด์ง€๋งŒ ๊ฒฝํ—˜์ด 0๊ฐœ์ด๋ฏ€๋กœ ๋ง ๊ทธ๋Œ€๋กœ ๋ฌด์—‡์„ ํ•ด์•ผํ• ์ง€ ์ „ํ˜€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

@Nosliwnayr
๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ํ—ค๋”๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ๊ฒƒ๋“ค์ด ์™„์ „ํ•œ ์“ฐ๋ ˆ๊ธฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋“ค์€ ๋˜ํ•œ ๊ณต์œ  ํ”„๋กœ์ ํŠธ๋ฅผ ํ›จ์”ฌ ๋” ์„ฑ๊ฐ€์‹œ๊ฒŒ ๋งŒ๋“ค๊ณ  ๋‚ด ๋งˆ์Œ ์†์— ๋„ˆ๋ฌด ๋งŽ์€ ๋‹จ์ ์ด ์žˆ๋Š” ๋์—†๋Š” ๋ถ€ํ’€๋ ค์ง - ํ•˜์ง€๋งŒ ์ด๋ด, ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ๊ฒƒ์„ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‚˜๋Š” ๋ฉ‹์ง€์ง€๋งŒ ๋‚˜์—๊ฒŒ๋Š” ๊ทธ๊ฒƒ๋“ค์ด ๋”๋Ÿฌ์šด ์†์ž„์ˆ˜์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์ง„์ •ํ•œ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด

์–ธ๋ฆฌ์–ผ ์—”์ง„ 4๋ฅผ ์‚ฌ์šฉํ•œ ํ›„, 20GB์˜ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ํ—›์†Œ๋ฆฌ์— ์ง€์ณค์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ๋“ค์ด ๊ทธ๋งŒํ•œ ๊ฐ€์น˜๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋œ ๋ฉ์ฒญํ•œ ์‹œ์Šคํ…œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์–ธ๋ฆฌ์–ผ ์—”์ง„ 4, ์ตœ๋Œ€ 60 - ๋‚˜๋ฅผ ์œ„ํ•ด 80GB, ๋ฉ‹์ง€์ง€ ์•Š์Œ)

Godot๊ฐ€ ๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ ํ–ฅํ•œ๋‹ค๋ฉด, ๋‚˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ๋นŒ์–ด๋จน์„ ์ •์‹ ์„ ์žƒ์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์  ์žฅ, ์  ์žฅ, ์ฐจ๋ผ๋ฆฌ ๊ทธ๋“ค์ด scons๋ฅผ ๊ณ ์ˆ˜ํ•˜๋„๋กํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์–ธ๋ฆฌ์–ผ ์—”์ง„ 4์˜ ๊ด‘๊ธฐ์˜ ๊ณต์„ ํ”ผํ•œ๋‹ค๋ฉด, ๋” ๋˜‘๋˜‘ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์€ scons๋ฅผ ์™„์ „ํžˆ ๊ต์ฒดํ•˜๋Š” ๋Œ€์‹  scons๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ๋ถ€๋Ÿฌ์ง„ ์—‰๋ฉ์ด ์ปดํŒŒ์ผ ์‹œ์Šคํ…œ, ํ˜„์žฌ ์‹œ์Šคํ…œ์ด ์ž‘๋™ํ•  ๋•Œ... ๋‹ค์†Œ๊ฐ„

์ƒˆ๋กœ์šด ์‹œ์Šคํ…œ์„ ๋„์ž…ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ •์‹ ์  ๋…ธ๋ ฅ์€ ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋†’๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๊ฒฐ๊ตญ ๋ช‡ ๋‹ฌ ๋™์•ˆ ๊ธฐ๋Šฅ์ ์œผ๋กœ ์†์ƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์™„๋ฃŒ๋˜๋ฉด ์ง€์˜ฅ์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋Ÿฌํ•œ ์ค‘์š”ํ•œ ์—”์ง„ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ผ๋‹จ ๋ณ€๊ฒฝ๋˜๋ฉด ๋˜๋Œ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@RaTcHeT302 - ์ง€์ •๋œ ๋ช…๋ น์ค„์€ ๋‹จ์ผ ๋Œ€์ƒ(์ด ๊ฒฝ์šฐ ๊ฐœ์ฒด ํŒŒ์ผ)(๋ฌผ๋ก  ์ข…์†๋œ ํŒŒ์ผ)๋งŒ ๋ช…์‹œ์ ์œผ๋กœ ์ปดํŒŒ์ผํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ SCons์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ๋ณต์žกํ•œ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ๋” ์ƒˆ๋กญ๊ณ  ๋น›๋‚˜๋Š” ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์ œ์•ˆํ•˜๊ธฐ๋ณด๋‹ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค๋ฉด .. ๊ธ€์Ž„, ๊ทธ๋Ÿฌํ•œ ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@bdbaddog Scons ๋Š” ์ค‘๊ฐ„ ๋‹จ๊ณ„ ๋นŒ๋“œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๊ณผ ๋™์ผํ•œ ๋‹จ๊ณ„์—์„œ "ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ" ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

MSVC, ninja-build, make, llvm ๋“ฑ ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋งค๋ฒˆ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋„๋ก CMake์— ์ง€์‹œํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

git ๋ถ„๊ธฐ๋ฅผ ์ „ํ™˜ํ•˜๋ฉด ์ ์ ˆํ•œ .vsproj ๋ฐ .sln ํŒŒ์ผ์„ ์žฌ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด scons ๋ช…๋ น์ค„ ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ  Visual Studio๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ํ•ญ์ƒ ๋นŒ๋“œ ๋ถ„๊ธฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ค‘๊ฐ„ ํŒŒ์ผ์€ ๋นŒ๋“œ์šฉ์ด ์•„๋‹ˆ๋ผ ์ •์  ๋ถ„์„๊ธฐ ๋ฐ ๊ธฐํƒ€ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

cmake๊ฐ€ ์™„๋ฒฝํ•˜์ง€ ์•Š๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜๊ณ (์ €๋„ ๊ทธ๋ ‡๊ฒŒ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค) ํŒŒ์ด์ฌ์˜ ์œ ์—ฐ์„ฑ์„ ์„ ํ˜ธํ•˜์ง€๋งŒ cmake๋Š” ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋นŒ๋“œ ๋„๊ตฌ์— ๋Œ€ํ•œ ์ตœ๊ณ ์˜ ํ†ตํ•ฉ ๋ฐ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํฌํฌ๋ฅผ CMake๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ๋Œ€๋ถ€๋ถ„์˜ ๋ณต์žก์„ฑ์€ ์ฝ”๋“œ ์ƒ์„ฑ ํŒŒ์ผ์— ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ๊ฐ€ ๋ณต์žกํ•˜๋‹ค๋Š” ์ƒ๊ฐ์€ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. ๋นŒ๋“œ๋Š” ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์— scons๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. scons๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ๋‚ด๊ฐ€ ์ž‘์—…์„ ์ค‘๋‹จํ•œ ์ด์œ ๋Š” 2019๋…„(Github ๋ชจ์ž„์—์„œ) GDC์—์„œ ์ˆ˜์„ ๊ฐœ๋ฐœ์ž๋ฅผ ๋งŒ๋‚ฌ๊ณ  ๋” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ์ „ํ™˜ํ•  ์ƒ๊ฐ์ด ์ „ํ˜€ ์—†๋‹ค๊ณ  ๋งํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ „์ ์œผ๋กœ Linux์—์„œ ๋นŒ๋“œํ•˜๊ณ  ์‹ค์ œ๋กœ ๋‚ด๊ฐ€ ๋ณธ ๋ฐ”๋กœ๋Š” Apple์—์„œ ํฌ๋กœ์Šค ์ปดํŒŒ์ผ์„ ์œ„ํ•œ ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด ์Šน์ธํ•ด์•ผ ํ•˜๋Š” EULA๋ฅผ ์œ„๋ฐ˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ด๋‹น์ž์˜ ์‚ฌ๊ณ ๋ฐฉ์‹์€ "๋ชฉ์ ์€ ์ˆ˜๋‹จ์„ ์ •๋‹นํ™”ํ•œ๋‹ค"๊ณ  ๋นŒ๋“œ๋ฅผ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ์ทจ๊ธ‰ํ•˜๋Š” ๋ฐ์—๋Š” ์ „ํ˜€ ๊ด€์‹ฌ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™๊ณ , ๋Œ€์‹  Godot๋Š” ๋นŒ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ผ๋ จ์˜ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ฝ”๋“œ ์ƒ์„ฑ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ Godot์— ๊ธฐ์—ฌํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ฉฐ(๋” ์ฝ๊ธฐ ์‰ฝ๊ณ  ๋น ๋ฆ„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ) ์ด ์—”์ง„์„ ์™„์ „ํžˆ ํฌ๊ธฐํ•˜๊ณ  ๋‚ด ์‚ถ์„ ๊ณ„์† ์ด์–ด๊ฐ”์Šต๋‹ˆ๋‹ค. ์†”์งํžˆ ๋งํ•˜๋ฉด ๋” ํ–‰๋ณตํ•ด์š”. ์—”์ง„์—๋Š” ์ด๋ฏธ ์ƒ๋‹นํ•œ ๊ธฐ์ˆ  ๋ถ€์ฑ„๊ฐ€ ์žˆ์œผ๋ฉฐ ํŠนํžˆ C++ ํ‘œ์ค€ ์œ„์›ํšŒ๊ฐ€ ํˆด๋ง ๊ธฐ์ˆ  ๋ณด๊ณ ์„œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ 3๋…„ ๋งŒ์— ๋ฌธ์ œ๊ฐ€ ๋  ๊ฒƒ์œผ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋Š ์ •๋„๋Š” ๊ธฐ์ˆ  ๋ณด๊ณ ์„œ์ผ ๋ฟ์ด๋ฏ€๋กœ ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์€ ์ด์— ๋Œ€ํ•ด ์˜๊ฒฌ์„ ๋‹ฌ๋ฆฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

๋ถ€๋„๋Ÿฝ๊ธฐ๋„ ํ•˜๋‹ค. ๋‚ด CMake ๋นŒ๋“œ๋Š” ์ˆ˜๋งŽ์€ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๊ณ  ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ์ •์  ๋ถ„์„ ์˜ค๋ฅ˜๋ฅผ ํฌ์ฐฉํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ๋ฒ„๊ทธ๋ฅผ ์‹ ๊ณ ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •์„ ์‹œ๋„ํ•˜๊ธฐ ์œ„ํ•ด GDC์—์„œ ๊ฐœ๋ฐœ์ž์™€ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋…ผ์Ÿํ•˜๋Š” ๋ฐ ๋„ˆ๋ฌด ์ง€์ณค์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์„. ๋‚ด ์—๋„ˆ์ง€์™€ ์ •์‹  ๊ฑด๊ฐ•์€ ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋” ์ž˜ ์†Œ๋น„๋ฉ๋‹ˆ๋‹ค.

scons๊ฐ€ ๋‹ค๊ฐ€์˜ค๋Š” C++20 ๋ชจ๋“ˆ ๋””์ž์ธ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์„ธ์ƒ์€ ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋„๊ตฌ๋ฅผ ๋ง๊ฐ€๋œจ๋ฆด ๊ฒƒ์ธ์ง€๋ฅผ ์™ธ์นœ ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์ข…์†์„ฑ ์ถ”์ ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์‚ฌ์ „ ์Šค์บ” ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ์ข…์†์„ฑ ์ถ”์ ์ด ๋”์šฑ ๋Š๋ ค์ง‘๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์‚ฌ์†Œํ•œ ๋ณ€๊ฒฝ๋งŒ ํ—ˆ์šฉํ•˜๋Š” ๋„๊ตฌ๋ฅผ ๊ฐœ์„ ํ•˜๋ ค๊ณ  ํ•˜์ง€ ๋ง๋ผ๊ณ  ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. Scons๋Š” ์—ฌ๊ธฐ ์‚ฌ๋žŒ๋“ค์ด ์ถ”๊ตฌํ•˜๋Š” ๊ฐœ์„  ์‚ฌํ•ญ์„ ์–ป๊ธฐ ์œ„ํ•ด ์ฒ˜์Œ๋ถ€ํ„ฐ ์™„์ „ํžˆ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ณ  ๋งŽ์€ ์ˆ˜์˜ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œ ์‹œ์Šคํ…œ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ๋…ผ์˜๊ฐ€ GDC 2019์—์„œ ๋‹ต๋ณ€๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฆฌ๋“œ๋Š” ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•  ๊ฐ€์น˜์กฐ์ฐจ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์˜.

๊ธฐ์กด ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด 100% ํ”Œ๋Ÿฌ๊ทธ ์•ค ํ”Œ๋ ˆ์ด ๋ฐฉ์‹์œผ๋กœ ๋ณ€ํ™˜๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ „ํ™˜ํ•˜์ง€ ์•Š์„ ์ด์œ ๊ฐ€ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Linux ์—์„œ๋งŒ ๋นŒ๋“œ

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

๋‚ด๊ฐ€ ์–ธ๋ฆฌ์–ผ ์—”์ง„์„ ๋– ๋‚œ ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” ์—”์ง„์ด ์ฃผ๋กœ ๋ธ”๋ฃจํ”„๋ฆฐํŠธ/ํ”„๋ก ํŠธ ์—”๋“œ ๊ฒŒ์ž„ ์ œ์ž‘์„ ์œ„ํ•ด ๋งž์ถคํ™”๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. C++ ๋ชจ๋“ˆ์—์„œ ๋„๊ตฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ Unreal์—์„œ ๋งค์šฐ ๊ณ ํ†ต์Šค๋Ÿฝ๊ณ  ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ Godot์—์„œ๋Š” ๊ฝค ์พŒ์ ํ–ˆ์Šต๋‹ˆ๋‹ค. C++ ๋นŒ๋“œ๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ํฐ ์žฅ์ ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

IIRC์—์„œ๋Š” Wine์„ ์‚ฌ์šฉํ•˜์—ฌ MSVC ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ๋‹น์‹ ์˜ ์š”์ ์„ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

Linux ์—์„œ๋งŒ ๋นŒ๋“œ

Godot๋Š” ํ•ญ์ƒ Linux๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋งŽ์€ ํ”Œ๋žซํผ์—์„œ ๋นŒ๋“œ ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค...

IIRC์—์„œ๋Š” Wine์„ ์‚ฌ์šฉํ•˜์—ฌ MSVC ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ๋‹น์‹ ์˜ ์š”์ ์„ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๊ณต์‹ Windows ๋นŒ๋“œ๋Š” MinGW๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค. Linux์—์„œ MSVC๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด WINE์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@marstaik - MSVS ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋นŒ๋“œ๋ฅผ ์ „ํ™˜ํ•˜๊ณ  scons๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ํŒŒ์ผ์„ ๋Œ€์ƒ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ์ „์ฒด ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์‹œ๋„:

scons <path to created MSVS project file>/VSPROJECTFILENAME (replace with actual paths and file name which are generated)

SCons๋Š” ์™„์ „ํ•œ ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ ๋„ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ๋จผ์ € ์ •๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ํ•„์š” ์—†์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
(BTW. ์ €๋Š” SCons ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ์ž์ž…๋‹ˆ๋‹ค)

@bdbaddog ํ•ด๋‹น ๋ช…๋ น์— vsproj=True๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Godot src์—์„œ:
scons -j24 godot.vxcproj num_jobs=x vsproj=true

ํŽธ์ง‘: ์–ด๋–ค ์ด์œ ๋กœ -j ํ”Œ๋ž˜๊ทธ๋„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค...

@bdbaddog ํ•ด๋‹น ๋ช…๋ น์— vsproj=True๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Godot src์—์„œ:
scons -j24 godot.vxcproj num_jobs=x vsproj=true

ํŽธ์ง‘: ์–ด๋–ค ์ด์œ ๋กœ -j ํ”Œ๋ž˜๊ทธ๋„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค...

์ด๋Ÿฌํ•œ ํ”Œ๋ž˜๊ทธ์˜ ๋Œ€๋ถ€๋ถ„์€ ๊ธฐ๋ณธ SCons๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ ๋‹ค์–‘ํ•œ ํŒจํ‚ค์ง€(์ด ๊ฒฝ์šฐ Godot)๊ฐ€ SCons๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.
๋ฐฉ๋ฒ•์„ ์ฐพ์œผ์…จ๋‹ค๋‹ˆ ๋‹คํ–‰์ž…๋‹ˆ๋‹ค!

์™œ SConstruct๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ๋นŒ๋“œ ์‹œ์Šคํ…œ์œผ๋กœ ์ „ํ™˜ํ•˜์ง€ ๋ง๋ผ๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๊นŒ???

@tjysdsg ์œ„์˜ ๋…ผ์˜๋Š” ๋งค์šฐ ์ž˜ ์š”์•ฝ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค :slightly_smiling_face:

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

์ด๋ฅผ ์œ„ํ•ด "์ฟจ๋Ÿฌ" ๋นŒ๋“œ ์‹œ์Šคํ…œ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ์ผ์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€๋‹ค์ˆ˜์˜ ํ•ต์‹ฌ ๊ธฐ์—ฌ์ž๋“ค์€ SCons๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋งŒ์กฑํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ ๊ฐ€์žฅ ์ž˜ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋นŒ๋“œ ์‹œ์Šคํ…œ์œผ๋กœ ์ „ํ™˜ํ•˜๋ ค๋ฉด ๊ตฌํ˜„๊ณผ ํ•™์Šต ๋น„์šฉ์ด ๋ชจ๋‘ ํ•„์š”ํ•˜๋ฉฐ, ์ด๊ฒƒ์ด ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ๋งŒํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š”์ง€๋Š” ์ง€๊ธˆ๊นŒ์ง€ ์ž…์ฆ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋Œ€์ฒด๋กœ ๋นŒ๋“œ ์‹œ์Šคํ…œ ๋ณ€๊ฒฝ์€ ์ƒˆ๋กœ์šด ๊ธฐ์—ฌ์ž๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‚ด๋ถ€์—์„œ ์™€์•ผ ํ•˜๋ฉฐ ๋ชจ๋“  ํ•ต์‹ฌ ๊ธฐ์—ฌ์ž๊ฐ€ ์ด๋ฅผ ๊ธ์ •์ ์ธ ๋ณ€ํ™”๋กœ ๋ณด์•„์•ผ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์†Œ์Šค์—์„œ Godot๋ฅผ ๋นŒ๋“œํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๊ณ  cmake ๋˜๋Š” meson ๋Œ€์‹  scons ๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š๋Š” ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž๋ฅผ ๊ธฐ์˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์„ ๊ฒƒ ์ž…๋‹ˆ๋‹ค meson ๊ทธ๋“ค์€ ์ต์ˆ™ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ์„ ํƒ์  ์ƒˆ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ๋„์ž…ํ•˜๋ ค๋Š” ์‹œ๋„๋ฅผ ๋ฐ›์•„๋“ค์ด์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฒฝํ—˜์— ๋”ฐ๋ฅด๋ฉด ์ด๊ฒƒ์ด ๋ถˆ์ผ์น˜, ๋ฒ„๊ทธ ๋ฐ ์ถœ๋ ฅ ์ฐจ์ด๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๋นŒ๋“œ ์‹œ์Šคํ…œ ๋ณ€๊ฒฝ ๋น„์šฉ์„ ๋Šฅ๊ฐ€ํ•˜๋Š” ๋ช…๋ฐฑํ•œ ์ด์ ์ด ๋‚˜์—ด๋˜๊ณ  ๊ฐœ๋… ์ฆ๋ช…๊ณผ ํ•จ๊ป˜ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋งˆ์Œ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์ง€๋งŒ, ์˜ค๋Š˜ ํ˜„์žฌ์™€ ์—ฌ๊ธฐ์„œ 2๋…„ ๊ฐ„์˜ ๋…ผ์˜ ๋์— ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ธ์„ผํ‹ฐ๋ธŒ๋ฅผ ๋ณด์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

@slurps-mad-rips๊ฐ€ ์ž˜ ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

scons๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ 

๋‚ด CMake ๋นŒ๋“œ๋Š” ์ˆ˜๋งŽ์€ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๊ณ  ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ์ •์  ๋ถ„์„ ์˜ค๋ฅ˜๋ฅผ ํฌ์ฐฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ”Œ๋žซ CMake ์‹ฌ๊ฐํ•˜๊ฒŒ ๊ณ ๋ ค๋˜์ง€ ์•Š์•˜ ์—ญ๊ฒจ์šด์—์„œ, ๋‚˜๋Š” ๋„๋ž‘ SCons๋Š” ๋งŽ์€ ์ด์œ ๋ฅผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, CMake ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌ ํŠน๋ณ„ํžˆ ๊ฒƒ์„ SCons๋Š” ๊ทธ๊ฒƒ์„ "๊ฐ€์น˜๊ฐ€"๋‹ค๋ฅธ ์‚ฌ์šฉ ๋ญ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด "์ฟจ๋Ÿฌ" ๋นŒ๋“œ ์‹œ์Šคํ…œ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ์ผ์€ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

CMake๋Š” "์ฟจ๋Ÿฌ"๊ฐ€ ์•„๋‹ˆ๋ผ ํ‘œ์ค€์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•ด๋ณด๋ฉด ๊ทธ ์ด์œ ๋ฅผ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๋นŒ๋“œ ์‹œ์Šคํ…œ ๋ณ€๊ฒฝ ๋น„์šฉ๋ณด๋‹ค ๋” ํฐ ์ด์ ์ด ๋‚˜์—ด๋˜๊ณ  ์ž‘์—… ๊ฐœ๋… ์ฆ๋ช…๊ณผ ํ•จ๊ป˜ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋งˆ์Œ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ˆ„๊ตฌ๋“ ์ง€ ๋งˆ์Œ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ญ์‹œ๋‚˜ @slurps-mad-rips๋Š” ํ™•์‹คํ•œ ์ด๋“์„ ๋ณด์˜€์œผ๋ฉฐ ๊ทธ๋…€๋Š” ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๊ณผ์ •์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๊ทธ๋…€์˜ ๋…ธ๋ ฅ์„ ์™„์ „ํžˆ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์€ Godot ํŒ€์˜ ๊ณต์‹ ์ž…์žฅ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜์น˜์Šค๋Ÿฌ์šด ์ผ์ž…๋‹ˆ๋‹ค.

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

2020๋…„ 2์›” 21์ผ ๊ธˆ์š”์ผ ์˜คํ›„ 1์‹œ 38๋ถ„ dorkbox [email protected]์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

@slurps-mad-rips https://github.com/slurps-mad-rips ๊ฐ€ ์ž˜ ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

scons๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ 

๋‚ด CMake ๋นŒ๋“œ๋Š” ๋งŽ์€ ์ •์  ๋ถ„์„ ์˜ค๋ฅ˜๋ฅผ ํฌ์ฐฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
์ˆ˜๋งŽ์€ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ–ˆ์œผ๋ฉฐ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CMake๊ฐ€ ์ง„์ง€ํ•˜๊ฒŒ ๊ณ ๋ ค๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด ์—ญ๊ฒน์Šต๋‹ˆ๋‹ค.
๋„๋ž‘ SCons๋Š” ๋งŽ์€ ์ด์œ ๋ฅผ ์ƒ๊ฐํ•˜์ง€๋งŒ, ํŠน๋ณ„ํžˆ ๊ทธ CMake์˜ ๋ฐœ๊ฒฌ
Scons๊ฐ€ ์ฐพ์ง€ ๋ชปํ•œ ์˜ค๋ฅ˜๋Š” ๋‹ค๋ฅธ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด "ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š”" ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด "์ฟจ๋Ÿฌ" ๋นŒ๋“œ ์‹œ์Šคํ…œ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ์ผ์€ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

CMake๋Š” "์ฟจ๋Ÿฌ"๊ฐ€ ์•„๋‹ˆ๋ผ ํ‘œ์ค€์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•ด๋ณด๋ฉด
์ด์œ ๋ฅผ ์ฆ‰์‹œ ์ดํ•ดํ•˜์‹ญ์‹œ์˜ค.

๋ฌผ๋ก  ๋ช…ํ™•ํ•œ ์ด์ต์ด ๋‚˜์—ด๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋งˆ์Œ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
(๋ฐ ์ž‘๋™ํ•˜๋Š” ๊ฐœ๋… ์ฆ๋ช…๊ณผ ํ•จ๊ป˜ ํ‘œ์‹œ๋จ)
๋นŒ๋“œ ์‹œ์Šคํ…œ ๋ณ€๊ฒฝ

๋‚˜๋Š” ๋ˆ„๊ตฌ๋“ ์ง€ ๋งˆ์Œ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ,
@slurps-mad-rips https://github.com/slurps-mad-rips ๋Š” ๋ถ„๋ช…ํ•œ ์ด๋“์„ ๋ณด์—ฌ์คฌ๊ณ ,
๊ทธ๋ฆฌ๊ณ  ๊ทธ๋…€๋Š” ์‹ฌ์ง€์–ด ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค... ์ด๋ฏธ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Godot ํŒ€์˜ ๊ณต์‹ ์ž…์žฅ์„ ๋Œ€๋ณ€ํ•˜๋Š” ๊ฒƒ์€ ๋ถ€๋„๋Ÿฌ์šด ์ผ์ž…๋‹ˆ๋‹ค.
๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐœ์„ ํ•˜๋ ค๋Š” ๊ทธ๋…€์˜ ๋…ธ๋ ฅ์„ ์™„์ „ํžˆ ๋ฌด์‹œํ•˜์‹ญ์‹œ์˜ค.

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/godotengine/godot/issues/16014?email_source=notifications&email_token=AAABPU2PBIEK6PFKQ2LDTHLRD6VKVA5CNFSM4ENJ6NN2YY48PONVWWK3TUL52HS4DFVREXG43VMVBW63
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/AAABPU746R4YFHAI73Z57RTRD6VKVANCNFSM4ENJ6NNQ
.

@dorkbox - cmake๊ฐ€ ์ •์  ๋ถ„์„ ์˜ค๋ฅ˜๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด llvm์˜ ์ •์  ๋ถ„์„ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋œ cmake์˜ ์ปดํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ถœ๋ ฅ์ด ๊ทธ๊ฒƒ๋“ค์„ ์ฐพ์•˜์Šต๋‹ˆ๊นŒ?

@bdbaddog , @slurps-mad-rips ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ ๊ทธ๋…€์—๊ฒŒ ๋ฌผ์–ด๋ณด๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค. (llvm์˜ ์ •์  ๋ถ„์„ ๊ฒฐ๊ณผ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ cmake๋ฅผ ํ†ตํ•ด ๋นŒ๋“œ ์ž‘์—…์„ ํ•œ ์‚ฌ๋žŒ์€ ์•„๋‹™๋‹ˆ๋‹ค.)

@slapin

๊ธฐ์ˆ ์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ด์œ ๊ฐ€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

์ •์  ๋ถ„์„ ๋„๊ตฌ ๋ฐ ์ตœ์‹  ์–ธ์–ด ๊ธฐ๋Šฅ ์ง€์›์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

@bdbaddog @dorkbox CMake๋ฅผ ํ†ตํ•ด "๋น„์ •์  ๋กœ์ปฌ์— ๋Œ€ํ•œ ์ฐธ์กฐ ๋ฐ˜ํ™˜" ๋ฐ "๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ"์™€ ๊ฐ™์€ ํ•ญ๋ชฉ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๊ฐ„๋‹จํžˆ clang-tidy๋ฅผ ์ผฐ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ ๋ช‡ ๊ฐ€์ง€์— ๋Œ€ํ•ด clang-check๋ฅผ ์‹คํ–‰ํ–ˆ๊ณ  ๋ช‡ ๊ฐ€์ง€ ๋” ๋งŽ์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. include-what-you-use ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ  ๋ถˆํ•„์š”ํ•œ ํ—ค๋” ํฌํ•จ ํ•ญ๋ชฉ์ด ๊ฝค ๋งŽ์ด ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ์‹ค์ œ๋กœ cmake ํฌํŠธ๋ฅผ "๋งˆ๋ฌด๋ฆฌ"ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด์‹๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„์€ JSON์—์„œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ํŒŒ์ผ์—์„œ ๋‹จ์ˆœํžˆ f.write ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํ˜„์žฌ python ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ์‹œ๋„ํ•œ ๋ชจ๋“  ์ž‘์—…์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ๋กœ์ง์„ ์ œ๊ฑฐํ•˜๊ณ  ์ผ๋ฐ˜ jinja2 ๊ธฐ๋ฐ˜ ํ…œํ”Œ๋ฆฟ ์ƒ์„ฑ๊ธฐ๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋˜ํ•œ ํ˜„์žฌ scons ๋นŒ๋“œ๊ฐ€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ ํŒŒ์ผ๋กœ ์‹œ์ž‘ํ•˜๋Š” Windows์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•ดํ‚น์„ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

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

GDC GitHub ๋ชจ์ž„์—์„œ ์ˆ˜์„ ๊ฐœ๋ฐœ์ž๋“ค๋กœ๋ถ€ํ„ฐ ๋งค์šฐ ๋‹จํ˜ธํ•˜๊ณ  ๋‹จํ˜ธํ•œ "์•„๋‹ˆ์˜ค"๋ฅผ ๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ด์ƒ Godot์— ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๊ณ  ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์›์น˜ ์•Š์•˜์œผ๋ฉฐ ์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์˜๊ฒฌ์— ๋ฌด๊ด€์‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” Godot๋‚˜ Godot์˜ ์–ด๋–ค ํฌํฌ์—๋„ ๊ธฐ์—ฌํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์—์„œ ์ˆ˜์„ ๊ฐœ๋ฐœ์ž๋ฅผ ์„ค๋“ํ•˜๋Š” ๋ฐ ํ–‰์šด์ด ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ๋งˆ์น˜ ๋ฒฝ๋Œ ๋ฒฝ์— ๋Œ€๊ณ  ๋งํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ์— ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์˜ ๊ณค๊ฒฝ์— ๊ตดํ•˜์ง€ ์•Š๊ณ , ์›€์ง์ด์ง€ ์•Š์œผ๋ฉฐ, ๋ƒ‰๋‹ดํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ SCons๊ฐ€ llvm ๋„๊ตฌ์— ์ž…๋ ฅ๋˜๋Š” ์ปดํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ฑ‰์–ด๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉด SCons์—์„œ๋„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ SCons๊ฐ€ llvm ๋„๊ตฌ์— ์ž…๋ ฅ๋˜๋Š” ์ปดํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ฑ‰์–ด๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉด SCons์—์„œ๋„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SCons์— ๋งค๋ชฐ ๋น„์šฉ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. cmake์™€ ๊ฐ™์ด ๋” ์‰ฝ๊ณ  ๋Šฅ๋ฅ ์ ์ด๋ฉฐ ์ด๋ฏธ ๊ธฐ์กด ๋นŒ๋“œ ๋„๊ตฌ์˜ ์ผ๋ถ€์ธ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

scons ์›น์‚ฌ์ดํŠธ์—์„œ:

scons์™€ ๋น„๊ตํ•  ๋•Œ CMake๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋” ๋น ๋ฅด๊ฒŒ
  • ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์— ๋” ์ ์€ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

    • ๋” ์•ˆ์ •์ ์ž„

    • scons๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” Code::Blocks, Xcode ๋“ฑ๊ณผ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ๋กœ์˜ ์ถœ๋ ฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

@dorkbox - ์ €๋Š” SCons ํ”„๋กœ์ ํŠธ ๊ณต๋™ ๊ด€๋ฆฌ์ž์ž…๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๊ธฐ๋Šฅ๋งŒ ์ง€์ผœ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ๋ช‡ ๊ฐ€์ง€ ๋ฆด๋ฆฌ์Šค์™€ ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—๋Š” ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋‹Œ์ž ํŒŒ์ผ ์ƒ์„ฑ์„ ์œ„ํ•œ PR์ด ์žˆ์œผ๋ฉฐ ์ผ๋ถ€ ์ปค๋ฎค๋‹ˆํ‹ฐ ํšŒ์›์€ ์ปดํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋„๊ตฌ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ผ๋ถ€ ๋ฌธ์ œ๋Š” ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—์„œ (์™„์ „ํ•˜์ง€๋Š” ์•Š๋”๋ผ๋„ ์ ์–ด๋„ ๋ถ€๋ถ„์ ์œผ๋กœ) ํ•ด๊ฒฐ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋‹ค๋ฃจ์ง€ ์•Š์€ Godot ํ”„๋กœ์ ํŠธ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์•ˆ์ •์„ฑ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋ฏธํ•ด๊ฒฐ ํ•ญ๋ชฉ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.
(๋‹ค์Œ์„ ํ†ตํ•ด ์ €ํฌ์—๊ฒŒ ์—ฐ๋ฝํ•˜์‹ญ์‹œ์˜ค: https://scons.org/contact.html)

๋‚˜๋Š” cmake๊ฐ€ ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์„ ์œ„ํ•ด ๋” ์ ์€ ์ฝ”๋“œ๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•ฉ๋ฆฌ์ ์ธ ๋น„๊ต์— ๊ด€์‹ฌ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์Œ, ๋‚ด๊ฐ€ scons๋กœ ๋‚˜๋ฅผ ๊ฐ€์žฅ ๊ดด๋กญํžˆ๋Š” ๊ฒƒ์€ ํ‰๋ฒ”ํ•œ ์˜ค๋ž˜๋œ ๊ฒƒ์„ ์ƒ์„ฑ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
GNU ๋ฉ”์ดํฌํŒŒ์ผ. ๋‹Œ์ž ๋ถ€์กฑ - ๋‚˜๋Š” ๊ทธ๊ฒƒ์œผ๋กœ ์‚ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ CMake ํˆด์ฒด์ธ ๋ฐ autotools์™€ ๊ฐ™์€ ํฌ๋กœ์Šค ์ปดํŒŒ์ผ ์œ ํ‹ธ๋ฆฌํ‹ฐ ์ฒ˜๋ฆฌ
ํฌ๋กœ์Šค ์ปดํŒŒ์ผ ๊ธฐ๋Šฅ์€ ๊ฐ•ํ•œ cmake ์•ฝ์ ์ž…๋‹ˆ๋‹ค.
๋‚˜๋จธ์ง€๋Š” IDE ์‚ฌ๋žŒ์ด ์•„๋‹ˆ๋ฏ€๋กœ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๋‚ด IDE๋Š” UNIX ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค.

2020๋…„ 2์›” 23์ผ ์ผ์š”์ผ ์˜คํ›„ 10:05 William Deegan [email protected]
์ผ๋‹ค:

@dorkbox https://github.com/dorkbox - ์ €๋Š” SCons ํ”„๋กœ์ ํŠธ ๊ณต๋™ ๊ด€๋ฆฌ์ž์ž…๋‹ˆ๋‹ค.
์›ํ•˜๋Š” ๊ธฐ๋Šฅ๋งŒ ์ง€์ผœ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๋‚œ ๋ช‡ ๊ฐ€์ง€ ๋ฆด๋ฆฌ์Šค์™€ ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—๋Š” ์„ฑ๋Šฅ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
๊ฐœ๋Ÿ‰.

๋˜ํ•œ ๋‹Œ์ž ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ์ผ๋ถ€ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋Œ€ํ•œ PR์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๊ตฌ์„ฑ์›์—๊ฒŒ๋Š” ์ปดํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋„๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ผ๋ถ€ ๋ฌธ์ œ๋Š”
๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—์„œ (์ „์ฒด๋Š” ์•„๋‹ˆ์ง€๋งŒ ์ ์–ด๋„ ๋ถ€๋ถ„์ ์œผ๋กœ) ํ•ด๊ฒฐ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ฐœ๋ฐœํ•œ Godot ํ”„๋กœ์ ํŠธ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์•ˆ์ •์„ฑ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
๋‹ค๋ฃจ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ฏธํ•ด๊ฒฐ ํ•ญ๋ชฉ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.
(๋‹ค์Œ์„ ํ†ตํ•ด ์ €ํฌ์—๊ฒŒ ์—ฐ๋ฝํ•˜์‹ญ์‹œ์˜ค: https://scons.org/contact.html)

๋‚˜๋Š” cmake๊ฐ€ ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์„ ์œ„ํ•ด ๋” ์ ์€ ์ฝ”๋“œ๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
ํ•ฉ๋ฆฌ์ ์ธ ๋น„๊ต์— ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/godotengine/godot/issues/16014?email_source=notifications&email_token=AAABPU5TQQFET5RS2JDRY7TRELCHDA5CNFSM4ENJ6NN2YY3PNVWWK3TUL52HS4DFVEXG43VMVBW63LN
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/AAABPU6UHPX3HJTWPAFTPATRELCHDANCNFSM4ENJ6NNQ
.

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