moaoh 2024. 11. 8. 23:19

CMake๋ž€?

  • makefile ์˜ ์ง์ ‘์ ์ธ ์ž‘์„ฑ์—์„œ ํ•œ๋ฐœ์ž๊ตญ ๋” ๋‚˜์•„๊ฐ€ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ makefile์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋ฐฉ์‹

 

์ง์ ‘์ ์ธ ์ปดํŒŒ์ผ ๋ฐฉ์‹

>> g++ main.cpp -o main
>> ./main
<< HELLO WORLD!!

 

 

CMake ์‚ฌ์šฉ๋ฒ•

 

Cmake ์„ค์น˜

>> brew install cmake

>> cmake --version
<< cmake version 3.31.0

 

Cmake ํ…Œ์ŠคํŠธ

์„ค์น˜ ํ›„์— ๊ฐ„๋‹จํ•˜๊ฒŒ main.cpp ํŒŒ์ผ์„ Cmake๋ฅผ ํ†ตํ•ด ๋นŒ๋“œํ•ด๋ณด์ž.

 

CMake๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•ด์„œ๋Š” CmakeLists.txt๋ผ๋Š” ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์ค˜์•ผํ•œ๋‹ค.

CmakeLists.txt์—๋Š” ๋นŒ๋“œ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด๋“ค์„ ๋‹ด์•„์„œ ์–ด๋–ป๊ฒŒ ๋นŒ๋“œ๋ฅผ ์ง„ํ–‰ํ•  ๊ฒƒ์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.
( ex: ์–ด๋–ค ํŒŒ์ผ์„ ๋นŒ๋“œํ•  ๊ฒƒ์ธ์ง€.. , ์‹คํ–‰ํŒŒ์ผ์˜ ์ด๋ฆ„์€ ๋ฌด์—‡์œผ๋กœ ํ• ๊ฒƒ์ธ์ง€.. , ํ”„๋กœ์ ํŠธ์˜ ์ด๋ฆ„์€ ๋ฌด์—‡์ธ์ง€.. ๋“ฑ๋“ฑ )

 

 

ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

Cmake-test
    - main.cpp
    - (CmakeLists.txt๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•  ์œ„์น˜)

 

CMakeLists.txt

# CMakeLists.txt
project(hello_world)
 
add_executable(main main.cpp)

์œ„์— CMakeLists.txt๋Š” ๋นŒ๋“œ๋ฅผ ํ•˜๊ธฐ์œ„ํ•œ ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ๋‚ด์šฉ๋“ค์„ ๋‹ด๊ณ ์žˆ๋‹ค.

 

project(hello_world)

  • project ๋ช…์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ์˜ ์ด๋ฆ„, ๋ฒ„์ „, ์–ธ์–ด ๋“ฑ์„ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • project๋ฅผ ์ง€์ •ํ•˜์ง€์•Š๋Š”๋‹ค๊ณ ํ•ด์„œ ์ปดํŒŒ์ผ์ด ์•ˆ๋˜๋Š”๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ํ˜ธํ™˜์„ฑ์ด๋‚˜ ์˜์กด์„ฑ ๋“ฑ์œผ๋กœ ์ธํ•ด ์ง€์ •ํ•˜๋Š”๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค.

add_executable(main main.cpp)

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

ex)

add_executable(main 
    	main.cpp
        test.cpp
)

 

 

๋นŒ๋“œ ํ›„ ์‹คํ–‰ํ•ด๋ณด๊ธฐ

์ด์ œ๋Š” CMakeLists.txt ์„ ๋ฐ”ํƒ•์œผ๋กœ CMake ํ•œ ๋‚ด์šฉ๋“ค์ด ๋‹ด๊ธธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ง€์ • ํ›„ ์ƒ์„ฑํ•ด์ค˜์•ผํ•œ๋‹ค.

main.cpp ํŒŒ์ผ์ด ์žˆ๋Š” ์œ„์น˜์—์„œ ๋ฐ”๋กœ ์ƒ์„ฑ์„ ํ•ด๋„ ๋˜๊ธดํ•˜์ง€๋งŒ ๊ทธ๋Ÿฌ๋ฉด ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ๋„ˆ๋ฌด ์ง€์ €๋ถ„ํ•ด์ง€๊ธฐ๋•Œ๋ฌธ์— CMake build ๋‚ด์šฉ๋“ค์ด ๋‹ด๊ธธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

 

๋””๋ ‰ํ† ๋ฆฌ๊ตฌ์กฐ

Cmake-test
    - main.cpp
    - CmakeLists.txt
    - (build ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ์œ„์น˜)

๋ณดํŽธ์ ์œผ๋กœ๋Š” ์œ„์™€๊ฐ™์ด CmakeLists.txt ํŒŒ์ผ์ด ์žˆ๋Š” ์œ„์น˜์— ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋‚ด์šฉ๋“ค์„ ๋‹ด๋Š”ํŽธ์ด๋‹ค.

 

<< mkdir build
(๋””๋ ‰ํ† ๋ฆฌ์˜ ์ด๋ฆ„์€ ๋‹ค๋ฅธ๊ฒƒ์œผ๋กœ ํ•ด๋„ ์ƒ๊ด€ X)
<< cd build
<< cmake .. 
(build ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ์žˆ์œผ๋‹ˆ cmake ๋ช…๋ น์–ด๋Š” .. ๊ฒฝ๋กœ์— ์žˆ๋Š” cmakelists.txt ๋ฅผ ์ฐธ์กฐํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ)
<< ls
CMakeCache.txt      CMakeFiles          Makefile            cmake_install.cmake
<< make
<< ./main
>> HELLO WORLD!!

 

CMake์—์„œ๋Š” ์ด๊ฒƒ๋ฟ์•„๋‹ˆ๋ผ ๋‹ค์–‘ํ•˜๊ฒŒ ๋นŒ๋“œ ์‹œ ์–ด๋– ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ™์ด ๋นŒ๋“œํ• ๊ฒƒ์ธ์ง€, CMake๋ฅผ ํ• ๋ ค๋ฉด ํ•„์š”ํ•œ ์ตœ์†Œ ๋ฒ„์ „ ๋“ฑ๋“ฑ ๋‹ค์–‘ํ•œ ์กฐ๊ฑด๋“ค์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

์ฐธ๊ณ ์ž๋ฃŒ

https://gist.github.com/luncliff/6e2d4eb7ca29a0afd5b592f72b80cb5c?permalink_comment_id=3300758