CMake를 사용한 실제 프로젝트 예제를 통해 CMake의 사용 방법과 구조를 이해해보겠다. 이 예제에서는 간단한 C++ 프로젝트를 빌드하는 과정을 다루며, 프로젝트는 하나의 실행 파일을 생성하고, 외부 라이브러리를 포함하는 것으로 구성된다.

프로젝트 구조

예제 프로젝트의 디렉토리 구조는 다음과 같다:

MyProject/
├── CMakeLists.txt
├── src/
│   ├── main.cpp
│   └── mylib.cpp
├── include/
│   └── mylib.h
└── external/
    └── CMakeLists.txt

CMakeLists.txt 파일 구성

최상위 CMakeLists.txt

먼저, 프로젝트의 최상위 CMakeLists.txt 파일을 작성한다.

cmake_minimum_required(VERSION 3.10)

project(MyProject LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

include_directories(${CMAKE_SOURCE_DIR}/include)

add_subdirectory(src)
add_subdirectory(external)

이 파일에서는 프로젝트 이름을 MyProject로 설정하고, C++11 표준을 사용하도록 지정 하였다. include_directories 명령을 통해 include/ 디렉토리를 포함 경로에 추가했으며, add_subdirectory 명령을 사용해 src/external/ 디렉토리를 추가 하였다.

src/CMakeLists.txt

다음으로, src/ 디렉토리 내의 CMakeLists.txt 파일을 작성한다.

set(SOURCES
    main.cpp
    mylib.cpp
)

add_executable(MyProject ${SOURCES})

target_link_libraries(MyProject MyExternalLib)

이 파일에서는 main.cppmylib.cpp 파일을 소스 파일로 지정하고, 이를 기반으로 MyProject 실행 파일을 생성한다. 또한, target_link_libraries 명령을 사용해 외부 라이브러리 MyExternalLib와 링크한다.

external/CMakeLists.txt

마지막으로, external/ 디렉토리의 CMakeLists.txt 파일을 작성한다. 이 예제에서는 외부 라이브러리의 빌드 설정을 정의한다.

add_library(MyExternalLib STATIC IMPORTED)

set_target_properties(MyExternalLib PROPERTIES
    IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/external/libMyExternalLib.a"
)

이 파일에서는 MyExternalLib라는 정적 라이브러리를 정의하고, IMPORTED_LOCATION 속성을 통해 외부 라이브러리 파일의 경로를 지정 하였다.

소스 파일 작성

main.cpp

#include "mylib.h"
#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    mylib_function();
    return 0;
}

main.cpp는 프로그램의 진입점으로, mylib.h에서 제공하는 함수를 호출한다.

mylib.h

#pragma once

void mylib_function();

mylib.hmylib.cpp에서 구현된 함수의 선언을 포함하는 헤더 파일이다.

mylib.cpp

#include "mylib.h"
#include <iostream>

void mylib_function() {
    std::cout << "MyLib Function Called!" << std::endl;
}

mylib.cppmylib_function의 구현을 포함하며, 이 함수는 콘솔에 메시지를 출력한다.

빌드 및 실행

이제 프로젝트를 빌드하고 실행할 수 있다.

  1. 프로젝트 디렉토리로 이동한다: cd MyProject

  2. 빌드 디렉토리를 생성하고 이동한다: mkdir build && cd build

  3. CMake를 실행하여 빌드 파일을 생성한다: cmake ..

  4. make 명령을 사용해 프로젝트를 빌드한다: make

  5. 생성된 실행 파일을 실행한다: ./MyProject

이 과정이 성공적으로 완료되면, 프로그램이 실행되어 "Hello, World!"와 "MyLib Function Called!" 메시지를 출력한다.

이 예제는 CMake를 사용하여 간단한 C++ 프로젝트를 빌드하는 방법을 설명하며, 소스 파일 관리, 외부 라이브러리 포함, 빌드 설정 등을 다루었다.