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

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

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

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

  • Objective C(โ€œOBJCโ€) ๋ฐ Objective ์–ธ์–ด์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    C++("OBJCXX") - project() ๋ฐ ํ™œ์„ฑํ™”_์–ธ์–ด() ๋ช…๋ น์„ ํ†ตํ•ด ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ ํ›„์—๋Š” ".m" ".mm" ํŒŒ์ผ์˜ ์ฝ”๋“œ๊ฐ€ ๋‹ค์Œ์ด ์•„๋‹Œ Objective C ๋ฐ Objective C++ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค. ์ด์ „๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ C++;

  • Solaris ํ”Œ๋žซํผ์— Clang ์ปดํŒŒ์ผ๋Ÿฌ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ๋ช…๋ น์ค„ ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค: ๋ฐ˜ํ™˜ ์ฝ”๋“œ 0๊ณผ 1์„ ์ธ์‡„ํ•˜๋Š” "cmake -E true|false"; "cmake --trace-redirect=" ๋Œ€์‹  ์ถ”์  ์ •๋ณด๋ฅผ ํŒŒ์ผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•ฉ๋‹ˆ๋‹ค.
    "ํ‘œ์ค€ ์˜ค๋ฅ˜"; "cmake --loglevel" ๋ช…๋ น์€ ๋‹ค๋ฅธ ๋ช…๋ น์˜ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•˜๋„๋ก "--log-level"๋กœ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์‚ฌ์ „ ์ปดํŒŒ์ผ ์ค‘์— ์‚ฌ์šฉ๋œ ํ—ค๋” ํŒŒ์ผ ๋ชฉ๋ก์„ ๋‚˜์—ดํ•˜๊ธฐ ์œ„ํ•ด "target_precompile_headers()" ๋ช…๋ น์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค(๋นŒ๋“œ ์‹œ๊ฐ„ ๋‹จ์ถ•).
  • ๋นŒ๋“œ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๊ธฐ์—์„œ ์†Œ์Šค ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐ์น˜ ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” "UNITY_BUILD" ์†์„ฑ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • "find_file()", "find_library()", "find_path()" ๋ช…๋ น์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    "find_package()" ๋ฐ "find_program()"์€ ๋‹ค์–‘ํ•œ ํŒŒ์ผ ๋ฒ”์ฃผ์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ๋ฅผ ์ •์˜ํ•˜๋Š” ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ํŒŒ์ผ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๊ฒฝ๋กœ, ํŒจํ‚ค์ง€ ๋ฐ ์‹คํ–‰ ํŒŒ์ผ์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
    The variables "CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH", "CMAKE_FIND_USE_CMAKE_PATH", "CMAKE_FIND_USE_CMAKE_SYSTEM_PATH", "CMAKE_FIND_USE_PACKAGE_ROOT_PATH", "CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH" and "CMAKE_FIND_USE_PACKAGE_REGIST" are used to control the base search paths RY";

  • ์‹คํ–‰ ํŒŒ์ผ์ด๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋™์ ์œผ๋กœ ๋งํฌํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชฉ๋ก์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” "file()" ๋ช…๋ น์— "file(GET_RUNTIME_DEPENDENCIES)" ๋ชจ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“œ๋Š” ํ˜„์žฌ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” GetPrerequisites() ๋ช…๋ น์„ ๋Œ€์ฒดํ–ˆ์Šต๋‹ˆ๋‹ค.
  • "ctest(1)" ๋ช…๋ น์€ ๊ฐ ํ…Œ์ŠคํŠธ์— ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง๋ ฌํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • "CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY" ๋ณ€์ˆ˜๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ "CMAKE_FIND_USE_PACKAGE_REGISTRY"๋กœ ๋Œ€์ฒด๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • AIX ํ”Œ๋žซํผ ์ง€์›์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "ENABLE_EXPORTS" ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹คํ–‰ ํŒŒ์ผ ์™ธ์—๋„ ๋ง์ปค์— ๋Œ€ํ•œ ๊ฐ€์ ธ์˜ค๊ธฐ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์–ด ".imp" ํ™•์žฅ์ž๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. "MODULE" ์˜ต์…˜๊ณผ ํ•จ๊ป˜ "add_library()"๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ƒ์„ฑ๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ๋Š” "target_link_libraries()" ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งํฌํ•  ๋•Œ ์ด ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ CMake๊ฐ€ ๋กœ๋“œ ์‹œ ์—ฐ๊ฒฐ์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ธฐํ˜ธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ AIX์—์„œ์˜ ๋Ÿฐํƒ€์ž„ ์—ฐ๊ฒฐ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” ๋กœ๋“œ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“ˆ์˜ ๋Ÿฐํƒ€์ž„ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด "CMAKE_SHARED_LINKER_FLAGS" ๋ฐ "CMAKE_MODULE_LINKER_FLAGS" ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ •์˜๋œ ๋ง์ปค ์‹œ์ž‘ ํ”Œ๋ž˜๊ทธ ๋ชฉ๋ก์—์„œ "-Wl, -G" ์˜ต์…˜์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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