1. CMake를 쓰는 이유


1 번째 이유 - Cross-platform 개발

지금까지 간단한 프로젝트를 하거나 코드를 짤 때는 Visual Studio로 솔루션을 만들고 프로젝트를 정의하고 C++ 코드를 작성했다. 하지만 이러한 코드를 Linux 환경으로 가져갔을 때, Linux용 C++ 컴파일러를 준비해놨다고 해도 빌드가 되지 않는다. 왜냐하면 Linux에는 Visual Studio 가 없기 때문이다. Linux에서는 C++ 코드를 Make 빌드 시스템을 이용한다. CMake는 이러한 빌드 시스템을 Windows, Linux 등의 cross-platform 환경에서 제공하며, 이러한 이유 때문에 cross-platform 개발에는 CMake가 거의 필수적으로 사용된다. Ninja, Conan 등과 같이 기타 빌드 시스템이 사용되기도 하지만, 이러한 시스템들도 CMake를 내장하고 있다고 들었다 (사실인지는 모르겠다).

2 번째 이유 - 솔루션의 변화를 빠르게 보기 위해 + 빠른 빌드를 위해

지금까지는 개인 프로젝트를 진행했을 때는 프로젝트의 크기가 작았기 때문에 , 어떤 헤더/소스파일이 추가되거나 제거되어도 버전 파악에 큰 문제가 없었다. 하지만 팀 단위의 작업을 하면서 어떤 3rd party library, 어떤 헤더, 어떤 소스파일이 빠지게 되는지 등등을 확인할 때, Visual Studio 프로젝트 빌드 파일을 보는 것 보다, 개인적으로 CMakeList.txt를 확인하는 것이 더 편했다. 그리고 솔루션 내부 특정 파일/프로젝트을 빼서 빌드하고 싶을 때, 빠르게 CMake에서 제거하고 빌드할 수 있었다.

3 번째 이유 - CMake 기반 IDE들이 있어서

개인적인 취향이 매우 많이 반영되었지만, JetBrains 사의 CLion IDE가 너무 이쁘다. C++ 완전 초보일 때 CLion이 너무 이뻐서 이 IDE를 선택하고 싶었지만, CMake를 이해하지 못해서 OpenCV를 include할 수 없었다. 그래서 Visual Studio로 돌아왔고 1년이 넘게 Visual Studio만을 사용했다. 이젠 이쁜 IDE로 넘어가고 싶다 ㅋㅋ

2. Tutorial


1. 폴더 안에 CMakeList.txt 파일을 만들고, 아래의 내용을 적는다.

cmake_minimum_required(VERSION 3.10)

# set the project name
project(Test)

# specify the C++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# add the executable
add_executable(Test main.cpp)

2. 같은 폴더에 source file 하나를 만든다.

대충 Hello world program을 만들었다.