개발/CMake

[CMake] Ch1. CMake 의 소개와 장점

growing-dev 2023. 9. 13. 23:13

CMake 가 도대체 뭔가요?

https://cmake.org/

CMake(Cross Platform Make)는 Make와 빌드 관리 시스템을 만들기 위해 윈도나 리눅스 계열과 상관없이 사용할 수 있는 Kitware 라는 회사의 오픈소스 프로젝트이자  빌드 파일(Unix MakeFile..)을 생성해 주는 프로그램입니다.

그럼 CMake만 있으면 소스 코드를 빌드하여 프로그램을 만들 수 있을까요? 아닙니다. 정확히 말하자면 CMake를 사용해서 C/C++ 프로젝트를 직접 빌드를 하는 것이 아니라, CMakeLists.txt 파일과 CMake 프로그램을 통해서 빌드를 할 수 있는 파일을 생성하게 되면 지정된 컴파일러를 통해서 make, ninja와 같은 명령어로 프로젝트를 빌드하는 것입니다.

예를 들어 Make를 사용하여 빌드를 하는 경우, CMakeList.txt 내에 CMake 문법에 맞게 명령어들을 작성하고 CMake 프로그램을 실행하면 CMake가 CMakeList.txt에 정해진 대로 Makefile을 생성하고 사용자는 cmake 혹은 make 명령어를 통해 빌드할 수 있습니다.

CMake 동작

 

만약 Make가 아닌 Ninja나 Windows Visual studio를 사용하는 경우에도 각각 그에 맞는 .ninja 파일과 project, sln 파일 등을 만들어 주는 역할을 합니다.

 

그래서 CMake가 뭐가 좋은 거죠?

위에서 간단히 CMake 개념 대해서 소개해 드렸는데요. CMake의 특징과 기존 Make를 사용하던 방식에 비해 어떤 것이 장점인지 정리해 보도록 하겠습니다.

특징

  • 소프트웨어 빌드에 특화된 명령어 집합의 언어로 독자적 설정 스크립트를 사용한다.
  • C, C++, 자바 등의 언어를 지원한다.
  • 각종 IDE에서 자체적으로 CMake를 분석할 수 있다.
  • 다양한 플랫폼(리눅스, 윈도)에서 크로스 컴파일을 지원한다.

장점

  • 조금만 익숙해지면 Make에 비해 복잡하지 않고 단순하고 사용자 친화적이다. 특히 프로젝트가 복잡해질수록 Make와 차이가 두드러진다.
  • 코드를 모듈화 해서 관리하기 쉽다. CMakeList.txt 혹은 xx.cmake 파일을 통해 구조적으로 모듈화 하기 쉽다.
  • 모듈화 된 라이브러리들의 의존성 관리가 쉽다. PUBLIC, PRIVATE 등의 속성을 통해 라이브러리의 캡슐화가 가능하다.
  • 각종 환경에 이미 적용되고 검증되어 있어서 호환성이 좋다.
  • 하나의 프로젝트로 시스템이나 플랫폼(OS 환경, 컴파일러)을 지원하도록 쉽게 구성할 수 있다.

 

무엇보다 제가 느던 장점은 사용자 친화적이라는 것입니다. C언어에서 느꼈던 답답함을 Python에서 많이 해결된 것을 느낄 수 있죠. C언어부터 주입식으로 학습했던 사람은 당연하게 느꼈던 모든 문장마다 ; 를 붙인다거나 void라는 개념, 특히 pointer와 같은 개념은 새롭게 시작하는 사람이 봤을 땐 이해가 잘 안 되고 하기 싫어집니다. 하지만 Python이란 언어는 사용자 친화적이어서 비개발자, 비전공자들도 코딩을 시작할 수 있을 만큼 진입장벽을 많이 낮추었습니다. 실제로 개발해야 할 로직도 복잡한데 기본적인 문법도 복잡하고 사용하기 어려우면 더 하기 싫어지니깐요.

저는 개인적으로 이런 Python의 철학이 CMake와도 흡사하다고 생각했습니다. 그래서 CMake는 결국 Make와 같은 간단하지만 복잡한 도구를 더 이해하기 쉽게 만들기 위해, 그리고 다양한 OS 환경에서도 쉽게 활용하기 위해 만들어졌다고 볼 수 있습니다.

 

그래도 잘 이해가 안 돼요.

CMake를 조금 써보셨거나 기존에 Make를 사용하여 컴파일러나 빌드 시스템에 대해 어느 정도 알고 계신 분이라면 위 설명을 이해하실 것이라고 믿습니다.

하지만 기존에 잘 모르셨거나 C/C++에 익숙하지 않으신 분이라면 뭐가 더 좋은지 잘 와닿지 않으실 겁니다. 평소에 잘 몰랐던 개념들 때문에 정확히 그래서 뭘 하는 것이고 뭐가 도움이 되는 건지, 굳이 CMake라는 것으로 번거롭게 한 단계가 더 생기는 건 아닌지 이해가 잘 안 되실 수도 있습니다.

일단 시작하기로 마음먹었다면 조금만 더 참고 CMake를 익혀보도록 합시다. 다음으로 나올 내용들을 진지하게 읽으시고 실습해 보신 뒤에 다시 CMake를 바라보신다면 이제 조금 다르게 보일 것이라고 확신합니다.

 

 

 

반응형