CMake

Alpha, Orderly·2024년 5월 28일

CMake 사용 방법

CMake는 C/C++ 프로젝트를 구성하고 빌드 시스템을 생성하는 데 사용하는 도구입니다.
다양한 플랫폼에서 프로젝트를 빌드하고 관리할 수 있도록 도와줍니다. CMake를 사용하는 주요 이유는 다음과 같습니다:

  • 다중 플랫폼 지원: Windows, macOS, Linux 등 다양한 플랫폼에서 동일한 CMake 파일을 사용하여 프로젝트를 빌드할 수 있습니다.
  • 유연성: 다양한 빌드 도구(예: Makefile, Visual Studio, Xcode 등)를 지원합니다.
  • 복잡한 프로젝트 관리: 종속성 관리, 외부 라이브러리 포함, 빌드 옵션 설정 등을 쉽게 할 수 있습니다.

예시 프로젝트 구조

다음은 예시 프로젝트의 디렉토리 구조입니다:

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

CMakeLists.txt 파일 작성

cmake_minimum_required(VERSION 3.10)
project(MyProject)

# C++ 표준 설정
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 헤더 파일 포함 디렉토리 추가
include_directories(include)

# 소스 파일 설정
set(SOURCES src/main.cpp)

# 실행 파일 생성
add_executable(MyProject ${SOURCES})

CMakeLists 의 문법

CMakeLists.txt 파일을 작성하기 위한 문법을 이해하면, CMake를 사용하여 프로젝트를 쉽게 구성할 수 있습니다. 아래는 CMakeLists.txt 파일을 작성하는 데 필요한 주요 문법과 그 예시입니다.

기본 구문

1. CMake 최소 버전 설정

cmake_minimum_required(VERSION <version>)

예시:

cmake_minimum_required(VERSION 3.10)

2. 프로젝트 이름과 언어 설정

project(<project-name> [LANGUAGES <language>])

예시:

project(MyProject LANGUAGES CXX)

변수 설정

1. 변수 정의

set(<variable> <value>)

예시:

set(CMAKE_CXX_STANDARD 11)
set(SOURCES src/main.cpp)

2. 변수 사용

변수를 사용할 때는 ${}를 사용합니다.

예시:

add_executable(MyProject ${SOURCES})

디렉토리 및 파일 설정

1. 포함 디렉토리 추가

include_directories(<dir1> [<dir2> ...])

예시:

include_directories(include)

2. 소스 파일 설정

set(SOURCES src/main.cpp src/other.cpp)

빌드 설정

1. 실행 파일 생성

add_executable(<name> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL]
               <source1> [source2 ...])

예시:

add_executable(MyProject ${SOURCES})

2. 라이브러리 추가

add_library(<name> [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL]
            <source1> [source2 ...])

예시:

add_library(MyLibrary STATIC src/mylib.cpp)

3. 타겟 링크 설정

target_link_libraries(<target> <lib1> [<lib2> ...])

예시:

target_link_libraries(MyProject MyLibrary)

조건문 및 반복문

1. 조건문

if(<condition>)
  <commands>
endif()

예시:

if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
endif()

2. 반복문

foreach(<var> <items>)
  <commands>
endforeach()

예시:

foreach(SRC IN LISTS SOURCES)
  message(STATUS "Source file: ${SRC}")
endforeach()

메시지 출력

message([<mode>] "message to display")

예시:

message(STATUS "Configuring project")

찾기 모듈 사용

1. 패키지 찾기

find_package(<package> [version] [EXACT] [QUIET] [REQUIRED] [components...])

예시:

find_package(OpenCV REQUIRED)

2. 패키지 구성

include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(MyProject ${OpenCV_LIBS})

예제 CMakeLists.txt 파일

위에서 배운 문법을 종합하여, 간단한 프로젝트의 CMakeLists.txt 파일을 작성해보겠습니다.

cmake_minimum_required(VERSION 3.10)
project(MyProject LANGUAGES CXX)

# C++ 표준 설정
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 헤더 파일 포함 디렉토리 추가
include_directories(include)

# 소스 파일 설정
set(SOURCES src/main.cpp)

# 실행 파일 생성
add_executable(MyProject ${SOURCES})

# 패키지 찾기 예제 (필요한 경우)
# find_package(SomeLibrary REQUIRED)
# include_directories(${SomeLibrary_INCLUDE_DIRS})
# target_link_libraries(MyProject ${SomeLibrary_LIBS})

# 조건문 예제
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
endif()

# 메시지 출력
message(STATUS "Project configured successfully")

이 예제 파일은 프로젝트를 구성하고 빌드하는 데 필요한 기본적인 CMake 구문을 모두 포함하고 있습니다. CMakeLists.txt 파일을 작성할 때, 필요에 따라 이 예제를 확장하여 사용할 수 있습니다.

src/main.cpp 파일 작성

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

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

include/myheader.h 파일 작성

// 헤더 파일 내용 (필요에 따라 추가)

CMake 사용 방법

  1. 빌드 디렉토리 생성: 소스 파일이 있는 디렉토리와는 별도로 빌드 파일을 생성할 디렉토리를 만듭니다.

    mkdir build
    cd build
  2. CMake 구성: CMakeLists.txt 파일을 기반으로 빌드 시스템을 생성합니다.

    cmake ..
  3. 프로젝트 빌드: 생성된 빌드 파일을 사용하여 프로젝트를 빌드합니다.

    cmake --build .
  4. 실행 파일 실행: 빌드된 실행 파일을 실행합니다.

    ./MyProject

위의 단계들을 통해 CMake를 사용하여 C++ 프로젝트를 구성하고 빌드할 수 있습니다.
CMake는 더 복잡한 프로젝트에서도 매우 유용하며, 다양한 추가 기능과 옵션을 제공합니다. 필요에 따라 공식 문서나 튜토리얼을 참고하여 더 많은 기능을 탐색할 수 있습니다.

profile
만능 컴덕후 겸 번지 팬

0개의 댓글