UNIX 기반의 운영체제, Debian 또는 Ubuntu, 에서 C/C++로 개발을 해보았거나, 오픈소스를 써본 사람이라면 CMake에 대해서 한 번쯤은 들어봤을 것이다. 공식 홈페이지 (https://cmake.org/)에 가보면 다음과 같이 CMake를 설명하고 있다.
CMake is an open-source, cross-platform family of tools designed to build, test and package software.
CMake는 오픈소스이며 크로스 플랫폼 성질을 갖는 빌드, 테스트 그리고 패키징 소프트웨어임을 알 수 있다. 쉽게 말하면 아무나 쓸 수 있고 어떤 운영체제에서도 특별히 다른 노력 없이 사용할 수 있는 빌드 프로그램이라는 것이다. 빌드란 소스 코드를 컴퓨터가 실행할 수 있는 독립적인 프로그램(또는 라이브러리)으로 만드는 과정을 말하는데, 빌드 프로그램은 빌드를 도와주는 도구라 생각하면 편하다. 빌드 과정에는 다양한 단계가 있는데, 특히 외부 라이브러리를 이용해서 프로그래밍하는 경우, 그 라이브러리를 내 프로그램에서 쓰기 위해선 링킹(linking)이라는 작업을 수행해야 한다. 이 작업이 생각보다 귀찮고 복잡하기 때문에 유명한 IDE(개발 환경)에서는 링킹을 쉽게 하기 위해 좋은 도구들을 제공한다. 당연히 CMake도 쉽게 링킹을 할 수 있고 여러 IDE로 프로젝트를 옮길 수도 있다. 즉, 한 사람이 CMake로 프로젝트를 구성하면 그 프로젝트를 가져다 쓰는 사람들은 어떤 IDE를 쓰더라도 쉽게 큰 노력이 필요 없이 개발을 이어 나갈 수 있다. CMake는 위와 같은 장점 덕분에 많은 오픈소스에서 사용되고 있다.
이제부터 CMake의 사용법에 대해서 익히고 유명한 오픈소스 프로젝트에서는 CMake를 이용해서 어떻게 프로젝트를 구성했는지, 파일 구조는 어떻게 만들어 놓았는지 살펴보면서 어떻게 하면 CMake를 이용해서 유연한 프로젝트를 만들 수 있을지 공부해본다.