Scientia Conditorium

[CMake] CMake란?! 본문

프로그래밍/C++

[CMake] CMake란?!

크썸 2024. 6. 25. 23:20

CMake 정의

Cross Platform Make 의 약자로 빌드 과정을 Platform, ToolChain에 비종속적인 방법으로 작성할 수 있음.

빌드 시스템(Build System)이 아닌 빌드 시스템 생성기(Build System Generator).

즉, Visual Studio, XCode와 같은 Native Build System이 사용하는 파일을 생성.

생성 후 Test, Package를 통해 간편하게 실행할 수 있도록 지원

 

 

 

Build System 정의

빌드를 정의하고 수행하기 위한 파일과 도구를 의미

예를 들어 아래와 같은 것들이 있음

  • 소스 코드(Source Code)
  • 리소스(Resource)
  • 컴파일러(Compiler)
  • 링커(Linker)
  • 패키징(Packaging)
  • 테스팅(Testing)
  • Operating System
  • SDK

 

CMake 역할

  • CMakeLists.txt
    • CMake 명령어를 사용하여 프로그램을 어떻게 구성하고 빌드할지 정의
    • CMake는 CMakeLists.txt을 읽고 빌드하기 위해 필요한파일들을 생성
    • 이 때 바로 생성하는 파일들이 XCode, Visual Studio, Make가 될 수 있음
    • 여기서 CMake가 빌드 시스템에 필요한 파일들을 생성해주기 때문에 CMake가 바로 Build System Generator인 것.
    • 생성한 이후부터는 CMake가 관여하지 않고 Build System을 사용해서 빌드를 진행
    • 따라서 새로운 파일을 생성한다면 CMakeLists.txt에 추가해주어야 함.
      빌드 시스템에 넣어주어도 빌드는 되지만 추후 문제가 발생할 수 있음.
    • 새 파일 추가 시 매번 CMake를 다시 실행해주어야 하는 단점이 있음.
    • 그러나 기존의 빌드 시스템의 파일 변경 사항은 사람이 바로 알기 어렵게 구성되어있는데,
      CMake는 프로그램 언어와 비슷하기 때문에 변경 사항을 바로 이해할 수 있음.
      이로 인해 Version Control System에 매우 친화적
  • CMake는 Build System Generator 이기 때문에 Build, Test, Install, Package를 CMake가 직접 하는 것이 아니라
    빌드 시스템을 사용하는 것.
    즉, CMake는 빌드 시스템을 호출해 주는 정도의 역할