CMake 3.15 ๋นŒ๋“œ ์‹œ์Šคํ…œ ์ถœ์‹œ

์ผ์–ด๋‚ฌ๋‹ค ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๊ฐœ๋ฐฉํ˜• ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ๊ธฐ ์ถœ์‹œ ์”จ๋ฉ”์ดํฌ 3.15, Autotools์˜ ๋Œ€์•ˆ์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ KDE, LLVM/Clang, MySQL, MariaDB, ReactOS ๋ฐ Blender์™€ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. CMake ์ฝ”๋“œ๋Š” C++๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ BSD ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

CMake๋Š” ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด, ๋ชจ๋“ˆ์„ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ์ˆ˜๋‹จ, ์ตœ์†Œํ•œ์˜ ์ข…์†์„ฑ(M4, Perl ๋˜๋Š” Python์— ๋Œ€ํ•œ ๋ฐ”์ธ๋”ฉ ์—†์Œ), ์บ์‹ฑ ์ง€์›, ๊ต์ฐจ ์ปดํŒŒ์ผ์„ ์œ„ํ•œ ๋„๊ตฌ ์กด์žฌ, ๋นŒ๋“œ ์ƒ์„ฑ ์ง€์›์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์œ ๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ด‘๋ฒ”์œ„ํ•œ ๋นŒ๋“œ ์‹œ์Šคํ…œ ๋ฐ ์ปดํŒŒ์ผ๋Ÿฌ์šฉ ํŒŒ์ผ, ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ ์ •์˜ ๋ฐ ํŒจํ‚ค์ง€ ๋นŒ๋“œ๋ฅผ ์œ„ํ•œ ctest ๋ฐ cpack ์œ ํ‹ธ๋ฆฌํ‹ฐ, ๋นŒ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋Œ€ํ™”ํ˜•์œผ๋กœ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ cmake-gui ์œ ํ‹ธ๋ฆฌํ‹ฐ.

์ฃผ์š” ๊ฐœ๋Ÿ‰:

  • Ninja ๊ธฐ๋ฐ˜ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ๊ธฐ์— ์ดˆ๊ธฐ ์–ธ์–ด ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋น ๋ฅธ, Apple์—์„œ ๊ฐœ๋ฐœ;
  • MSVC ABI๋กœ ๋นŒ๋“œ๋˜์ง€๋งŒ GNU ์Šคํƒ€์ผ ๋ช…๋ น์ค„ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” Windows์šฉ Clang ์ปดํŒŒ์ผ๋Ÿฌ ๋ณ€ํ˜•์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • MSVC ABI(MS Visual Studio) ๊ธฐ๋ฐ˜ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋Ÿฐํƒ€์ž„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•ด CMAKE_MSVC_RUNTIME_LIBRARY ๋ฐ MSVC_RUNTIME_LIBRARY ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • MSVC์™€ ๊ฐ™์€ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๊ฒฝ์šฐ CMAKE__FLAGS๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ "/W3"๊ณผ ๊ฐ™์€ ๊ฒฝ๊ณ  ์ œ์–ด ํ”Œ๋ž˜๊ทธ ๋‚˜์—ด์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ์ฝ”๋“œ ํŒŒ์ผ์— ๋Œ€ํ•ด CMAKE__COMPILER_ID ๋ฐ LANGUAGE ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ƒ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๊ธฐ ํ‘œํ˜„์‹ "COMPILE_LANG_AND_ID:"๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ƒ์„ฑ๊ธฐ ํ‘œํ˜„์‹ C_COMPILER_ID, CXX_COMPILER_ID,
    CUDA_COMPILER_ID, Fortran_COMPILER_ID, COMPILE_LANGUAGE,
    COMPILE_LANG_AND_ID ๋ฐ PLATFORM_ID๋Š” ์š”์†Œ๊ฐ€ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ๋ชฉ๋ก์— ๋‹จ์ผ ๊ฐ’์„ ์ผ์น˜์‹œํ‚ค๋Š” ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ํŒŒ์ธ๋”๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋„ find_package()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํŒจํ‚ค์ง€์˜ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋จผ์ € ๊ฒ€์ƒ‰ํ•˜๋„๋ก CMAKE_FIND_PACKAGE_PREFER_CONFIG ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ธํ„ฐํŽ˜์ด์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฒฝ์šฐ PUBLIC_HEADER ๋ฐ PRIVATE_HEADER ์†์„ฑ ์„ค์ •์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด PUBLIC_HEADER ๋ฐ PRIVATE_HEADER ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์—ฌ install(TARGETS) ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ํ—ค๋”๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • MSVC cl 19.05 ๋ฐ ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผํ•  ๋•Œ Visual Studio ๋””๋ฒ„๊ฑฐ์—์„œ "๋‚ด ์ฝ”๋“œ๋งŒ" ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด CMAKE_VS_JUST_MY_CODE_DEBUGGING ๋ณ€์ˆ˜ ๋ฐ ๋Œ€์ƒ ์†์„ฑ VS_JUST_MY_CODE_DEBUGGING์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • FindBoost ๋ชจ๋“ˆ์ด ์žฌ์„ค๊ณ„๋˜์–ด ์ด์ œ ๋‹ค๋ฅธ ๊ฒ€์ƒ‰ ๋ชจ๋“ˆ์ด ์žˆ๋Š” ๊ตฌ์„ฑ ๋ฐ ๋ชจ๋“ˆ ๋ชจ๋“œ์—์„œ ๋”์šฑ ์ „์ฒด์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
  • message() ๋ช…๋ น์€ ์ด์ œ NOTICE, VERBOSE,
    ๋””๋ฒ„๊ทธ ๋ฐ ์ถ”์ ;

  • ์ด์ œ "export(PACKAGE)" ๋ช…๋ น์€ CMAKE_EXPORT_PACKAGE_REGISTRY ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๋ช…์‹œ์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š๋Š” ํ•œ ์•„๋ฌด ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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