반응형

운영체제 환경: Ubuntu

 

프로젝트 구조

multi-files/
├── CMakeLists.txt
├── main.cpp
├── math_utils.cpp
└── math_utils.h

 

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(MathApp VERSION 1.0)

# C++17 표준 사용
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 컴파일러 경고 활성화
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")

# 실행 파일 생성
add_executable(mathapp
    main.cpp
    math_utils.cpp
)

 

코드 설명:

cmake_minimum_required:

이 프로젝트를 빌드 하는데 필요한 CMake의 최소 버전을 지정합니다. CMakeLists.txt파일의 첫 번째 명령어로 오는게 관례이고 project() 보다 먼저와야합니다.

 

project:

현재 CMake 프로젝트의 이름과 지원하는 언어를 정의합니다.  (예: Visual Studio의 솔루션 이름, IDE에서 표시되는 이름)

형식은 아래와 같으며

project(<PROJECT-NAME> [VERSION <version>] [LANGUAGES <language>...])

 

해당 프로젝트가 C++와 C를 모두 지원하는 경우 아래처럼 쓰이기도 합니다.

 

예시)

project(MyAwesomeApp VERSION 1.0 LANGUAGES CXX C)

 

set:

CMake 내부에서 사용할 변수(Variable)를 정의하거나 값을 설정합니다.

컴파일러 플래그, 소스 파일 목록, 라이브러리 경로 등 재사용하거나 조건부로 변경할 필요가 있는 정보를 저장합니다.

변수는 ${변수명} 형식으로 다른 명령어에서 참조될 수 있습니다.

 

형식)

set(<variable> <value>... [PARENT_SCOPE] [CACHE] [FORCE])

 

예시)

set(SOURCE_FILES main.cpp utility.cpp)
set(CMAKE_CXX_STANDARD 17) # C++17 표준 사용 설정

 

add_executable:

지정된 소스 파일로 부터 어떤 실행파일을 만들지를 지정합니다. add_executable의 첫번째 인자는 실행파일 이름입니다.

- add_executable(<실행파일 이름> <옵션들>... <소스파일들>...)  (참고: add_executable 문법)

 

예시)

# 'myapp'이라는 이름의 실행 파일을 main.cpp와 SOURCE_FILES 변수의 파일들로 생성
add_executable(myapp main.cpp ${SOURCE_FILES})

 

 

소스 및 헤더파일들

math_utils.h:

#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);
int multiply(int a, int b);

#endif

 

 

math_utils.cpp:

#include "math_utils.h"

int add(int a, int b) {
    return a + b;
}

int multiply(int a, int b) {
    return a * b;
}

 

main.cpp:

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

int main() {
    std::cout << "5 + 3 = " << add(5, 3) << std::endl;
    std::cout << "5 * 3 = " << multiply(5, 3) << std::endl;
    return 0;
}

 

 

빌드 및 실행

mkdir build && cd build
cmake ..
make
./mathapp

 

 

실행 결과

5 + 3 = 8
5 * 3 = 15

반응형