대충보는 C++ & CMake - 3. 빌드, 컴파일, 링크

이 글에서는 빌드/컴파일/링크가 무엇인지 알아봅니다.


TL;DR

  • 컴파일은 번역하는 과정, 링크는 번역된 파일을 묶는 과정, 그리고 빌드는 컴파일과 링크를 합쳐서 부르는 것
  • main.cpp 파일이 프로그램의 실질적 동작을 설명하는 C++로 된 코드
  • build 폴더는 빌드를 통해 나온 결과물이 담긴 폴더

용어 설명

컴파일

컴파일이란 사람의 언어로 작성된 코드(e.g. main.cpp)를 컴퓨터가 사용하는 언어로 번역하는 과정을 의미합니다.

컴퓨터는 C++로 작성된 파일을 해석할 수 없습니다. 그래서 이 파일을 컴퓨터가 사용하는 이진수(binary) 기반의 언어로 번역하는 단계가 필요합니다. 이 과정을 컴파일(compile)이라 부르고, 컴파일을 수행해주는 도구를 컴파일러(compiler)라고 합니다.

번역기도 파파고나 구글번역기 등 여러가지가 있고 각각의 결과물도 다르고 성능도 다르듯, 컴파일러도 여러가지 종류가 있고 각각의 특징이나 장단점이 있습니다. 이 시리즈에서는 그 중 Microsoft에서 제공하는 컴파일러를 이용하고 있는 것입니다.

링크

링크란 여러 개의 파일들을 한데 묶어서 하나의 실행용 프로그램(e.g. .exe 파일)을 만들어내는 과정을 의미합니다.

지금 우리는 C++ 코드가 main.cpp 파일 하나만 가지고 있지만, 앞으로 C++을 배워나가다 보면 더 많은 파일을 이용하여 이들을 모아 하나의 프로그램을 만들어야 할 일이 생길 것입니다1. 마치 요리를 할 때 메인 재료 이외에도 다른 부가적인 재료와 양념이 들어가듯 말이죠. 이 때, 여러 개의 파일들을 유기적으로 잘 엮어서 하나의 완성된 프로그램으로 만들어내는 과정을 링크(link)라고 부르고, 링크를 수행해주는 도구를 링커(linker)라고 합니다.

빌드

빌드란 컴파일과 링크의 두 과정을 합친 것입니다.

순서 상으로는, 컴파일을 먼저 한 뒤에, 번역된 파일들을 링크하는 과정을 거쳐 프로그램이 만들어집니다. 이 일련의 과정을 빌드(build)라고 하고, 빌드를 수행해주는 도구를 빌더(builder)라고 하는 것이죠.

컴파일이라는 용어를 빌드의 뜻으로 사용하는 경우가 꽤나 자주 있으니 그러려니 하고 넘어가시면 됩니다.

CMake: Quick Start 프로젝트 파일구조

지난 번 글에서 만든 CMake: Quick Start 프로젝트를 살펴보며 설명을 이어가도록 하겠습니다.

만약 다른 IDE를 사용하고 있어 CMake: Quick Start를 실습하지 못하는 분은, 그냥 이론적인 부분만 보고 넘어가셔도 괜찮습니다.

CMake: Quick Start 프로젝트를 만든 폴더에는 다음과 같은 내용물이 만들어져 있을 것입니다.

  • main.cpp 파일
  • build 폴더
  • CMakeLists.txt 파일
  • .vscode 폴더(이 폴더는 있을 수도 있고, 없을 수도 있습니다)

각각에 대해 간단히 살펴보겠습니다.

main.cpp 파일

main.cpp 파일은 프로그램이 실제로 어떤 일을 수행할 지에 대해 C++ 언어로 적혀있는 파일로, 가장 핵심이 되는 파일입니다.

앞으로 우리가 이 시리즈를 진행함에 있어, 계속 수정하며 살펴볼 파일입니다.

build 폴더

build 폴더는 빌드를 수행하여 나온 결과물이 담긴 폴더입니다.

빌드 결과물을 담는 경로는 자유롭게 변경 가능하지만, 이처럼 build라는 이름의 폴더를 만들고 그 안에 결과물을 담는 것이 일반적입니다. 이 시리즈와 같이 환경을 구셩하셨다면, 자동으로 이 관례에 따라 저장될 것입니다.

CMakeLists.txt 파일

CMakeLists.txt 파일은 CMake라는 프로그램을 활용하기 위해 필요한 파일입니다. 이는 나중에 CMake에 대해 다룰 때 다시 살펴보겠습니다.

.vscode 폴더

.vscode 폴더는 VSCode라는 IDE를 사용할 때의 설정 값 등이 저장되는 폴더로, CMake 기반의 프로젝트와는 아무런 관계가 없는 폴더입니다.

나중에 여러가지 설정을 조정할 때 쓰일 일이 있으니, 그 때 다시 살펴보겠습니다.


Changelog

  • 2021-11-10: 최초 게시
  • 2021-11-11: TL;DR 추가

  1. 사실 지금처럼 main.cpp 파일 하나만으로 프로그램을 만들 때에도, 눈에 보이지 않는 수많은 다른 파일들이 엮어져서 프로그램이 만들어지게 됩니다. 이는 C++ 프로그램을 만들 때 알아서 엮어지도록 되어 있어서 직접 보이지 않을 뿐입니다. ↩︎

다음