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