Native build tool

CMake는 빌드를 스스로 하려고 디자인된 도구가 아니다. 이는 실제 native build tool 파일을 생성한다. 그러므로 CMake를 사용할 때는 도구를 선택하고 필요하다면 설치해야 한다. 옵션 `-G <generator-name>`은 사용할 제너레이터의 타입을 지정할 때 사용된다. 만약 옵션이 없다면, CMake는 디폴트 제너레이터를 사용할 것이다. (예를 들어, nix 플랫폼이라면 `Unix Makefiles`)

 

사용 가능한 제너레이터 목록은 호스트 운영체제에 따라 달라진다(예: Visual Studio 계열 제너레이터는 Linux에서는 사용할 수 없다). 이 목록른 `cmake --help`명령을 통해 얻을 수 있다.

 

> cmake --help

...

Generators

The following generators are available on this platform (* marks default):
* Visual Studio 17 2022        = Generates Visual Studio 2022 project files.
                                 Use -A option to specify architecture.
  Visual Studio 16 2019        = Generates Visual Studio 2019 project files.
                                 Use -A option to specify architecture.
  Visual Studio 15 2017 [arch] = Generates Visual Studio 2017 project files.
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files.
                                 Optional [arch] can be "Win64" or "ARM".
  Borland Makefiles            = Generates Borland makefiles.
  NMake Makefiles              = Generates NMake makefiles.
  NMake Makefiles JOM          = Generates JOM makefiles.
  MSYS Makefiles               = Generates MSYS makefiles.
  MinGW Makefiles              = Generates a make file for use with
                                 mingw32-make.
  Green Hills MULTI            = Generates Green Hills MULTI files
                                 (experimental, work-in-progress).
  Unix Makefiles               = Generates standard UNIX makefiles.
  Ninja                        = Generates build.ninja files.
  Ninja Multi-Config           = Generates build-<Config>.ninja files.
  Watcom WMake                 = Generates Watcom WMake makefiles.
  CodeBlocks - MinGW Makefiles = Generates CodeBlocks project files
                                 (deprecated).
  CodeBlocks - NMake Makefiles = Generates CodeBlocks project files
                                 (deprecated).
  CodeBlocks - NMake Makefiles JOM
                               = Generates CodeBlocks project files
                                 (deprecated).
  CodeBlocks - Ninja           = Generates CodeBlocks project files
                                 (deprecated).
  CodeBlocks - Unix Makefiles  = Generates CodeBlocks project files
                                 (deprecated).
  CodeLite - MinGW Makefiles   = Generates CodeLite project files
                                 (deprecated).
  CodeLite - NMake Makefiles   = Generates CodeLite project files
                                 (deprecated).
  CodeLite - Ninja             = Generates CodeLite project files
                                 (deprecated).
  CodeLite - Unix Makefiles    = Generates CodeLite project files
                                 (deprecated).
  Eclipse CDT4 - NMake Makefiles
                               = Generates Eclipse CDT 4.0 project files
                                 (deprecated).
  Eclipse CDT4 - MinGW Makefiles
                               = Generates Eclipse CDT 4.0 project files
                                 (deprecated).
  Eclipse CDT4 - Ninja         = Generates Eclipse CDT 4.0 project files
                                 (deprecated).
  Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files
                                 (deprecated).
  Kate - MinGW Makefiles       = Generates Kate project files (deprecated).
  Kate - NMake Makefiles       = Generates Kate project files (deprecated).
  Kate - Ninja                 = Generates Kate project files (deprecated).
  Kate - Ninja Multi-Config    = Generates Kate project files (deprecated).
  Kate - Unix Makefiles        = Generates Kate project files (deprecated).
  Sublime Text 2 - MinGW Makefiles
                               = Generates Sublime Text 2 project files
                                 (deprecated).
  Sublime Text 2 - NMake Makefiles
                               = Generates Sublime Text 2 project files
                                 (deprecated).
  Sublime Text 2 - Ninja       = Generates Sublime Text 2 project files
                                 (deprecated).
  Sublime Text 2 - Unix Makefiles
                               = Generates Sublime Text 2 project files
                                 (deprecated).

 

 

컴파일러

Native build tool은 우리의 빌드를 조율하기만 할 뿐이며, 우리는 C++ 소스로부터 실제로 바이너리를 생성하는 컴파일러를 가지고 있어야 한다.

 

Visual Studio

Visual Studio의 컴파일러 `cl.exe`는 IDE와 함께 설치되므로, 별도의 추가 작업은 필요하지 않다.

 

 

Ubuntu GCC

GCC 컴파일러는 보통 Lilnux에서 사용된다. Ubuntu에 설치하려면 다음 명령어를 입력하면 된다.

sudo apt-get install -y gcc

 

 

Minimal example

cmake_minimum_required(VERSION 3.20)
project(foo) # Project를 `foo`로 선언하면, Visaul Studio에서는 `foo.sln`으로 이름을 가지게 된다

add_executable(foo foo.cpp)

 

CMake는 몇 가지 사전에 정의된 세팅을 가지고 있다. 그래서 다음과 같은 사항은 자동으로 처리된다.

  • `*.cpp` 확장자는 C++ 소스 파일을 의미하므로, 타겟 `foo`는 C++ 컴파일러로 빌드된다.
  • 윈도우에서는 보통 `.exe`를 접미사로 가지므로 결과로 생성되는 바이너리 이름은 `foo.exe`가 된다.
  • OSX 또는 Linux같은 유닉스 플랫폼에서는 보통 접미사를 가지지 않으므로, 결과로 생성되는 바이너리 이름은 `foo`가 된다.

 

GUI로 native tool files 생성 및 빌드

1. Configure의 기반이 되는 경로와 Build될 결과가 저장될 디렉토리 경로 지정

 

 

Configure, Generate 결과확인

 

Generate가 완료되면 build 폴더에서 `foo.sln`가 생성된 것을 확인할 수 있다. 

 

 

Sln파일을 열어서 프로젝트 시작 후 결과 확인

 

 

 

CLI로 native tool files 생성

경로 지정은 사용자의 환경에 맞춰 진행.

 

 

Configure + Generate

cmake -S . -B ../../out/build -G "Visual Studio 17 2022"

 

build

cmake --build ../../out/build

 

바이너리 실행

> ../../out/build/Debug/foo.exe      
Hello from CGold!

 

 

참고 자료