Choose a default theme

You can change your theme from the menu

CMake

Earlier revision · 1View current content

CMake는 C·C++ 등의 프로젝트를 여러 환경에서 빌드하도록 구성하는 도구다. CMakeLists.txt에 실행 파일·라이브러리·의존 관계를 표현하면 선택한 생성기에 맞는 빌드 시스템을 만든다. CMake 자체가 C++ 컴파일러를 대신하는 것은 아니며 컴파일러와 실제 빌드 도구가 준비되어 있어야 한다.

구성과 빌드의 구분

구성 단계는 소스와 도구를 확인해 빌드 디렉터리를 준비하고, 빌드 단계는 그 설정에 따라 컴파일·링크를 실행한다. 소스 디렉터리와 빌드 디렉터리를 분리하면 생성 파일이 원본과 섞이는 일을 줄일 수 있다. 설정 결과를 담는 캐시가 있으므로 컴파일러나 대상 아키텍처를 바꿀 때는 기존 빌드 디렉터리를 무조건 재사용하지 않는다.

장점은 운영체제별 빌드 파일을 따로 유지하는 부담을 줄이고 대상 단위로 의존성과 컴파일 옵션을 전달할 수 있다는 것이다. IDE와 명령줄 빌드도 연결하기 쉽다. 한계는 생성기·캐시·변수 범위를 이해해야 하며 오래된 전역 설정 관례와 대상 중심 관례가 혼재한 프로젝트가 복잡해지기 쉽다는 점이다.

대출 안내 프로그램 예제

CMake 3.20 이상과 C++ 컴파일러, 해당 환경의 빌드 도구를 준비한다. 같은 연습 폴더에 CMakeLists.txt와 main.cpp를 만든다. 아래는 외부 라이브러리가 없는 가상 안내 프로그램이다.

cmake_minimum_required(VERSION 3.20)
project(LoanNotice LANGUAGES CXX)
add_executable(loan_notice main.cpp)
target_compile_features(loan_notice PRIVATE cxx_std_17)
#include <iostream>

int main() {
const int remaining = 3;
std::cout << "Borrowing slots: " << remaining << '\n';
}
cmake -S . -B build
cmake --build build --config Release

첫 명령은 현재 소스를 읽어 build 안에 빌드 설정을 만든다. 두 번째 명령은 선택된 빌드 도구를 호출한다. 실행 파일 이름은 loan_notice이며 확장자와 출력 하위 디렉터리는 플랫폼·생성기에 따라 달라진다. 실행하면 Borrowing slots: 3이 표시되도록 작성한 예제다.

생성기와 설정의 차이

여러 구성을 지원하는 생성기는 빌드 때 --config Release를 선택할 수 있다. 단일 구성 생성기에서는 구성 단계의 CMAKE_BUILD_TYPE을 지정하는 방식이 일반적이다. 위 명령만으로 모든 생성기에서 Release 최적화가 선택됐다고 단정하면 안 된다. 생성기의 종류와 실제 컴파일 옵션을 확인한다.

전역 include 경로나 컴파일 플래그를 넓게 바꾸기보다 target_include_directories, target_link_libraries처럼 대상에 필요한 조건을 붙인다. PUBLIC·PRIVATE·INTERFACE는 의존 대상에 전달될 범위를 정하므로 단순한 공개·비공개 파일 분류가 아니다. 빌드 성공 뒤 실제 동작 검사는 CTest나 별도 테스트로 수행하며, 설치와 패키징도 빌드와 구분해 관리한다.

참고 자료