이 글에서는 빌드/컴파일/링크가 무엇인지 알아봅니다.
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 프로젝트를 살펴보며 설명을 이어가도록 하겠습니다.
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 추가
-
사실 지금처럼
main.cpp
파일 하나만으로 프로그램을 만들 때에도, 눈에 보이지 않는 수많은 다른 파일들이 엮어져서 프로그램이 만들어지게 됩니다. 이는 C++ 프로그램을 만들 때 알아서 엮어지도록 되어 있어서 직접 보이지 않을 뿐입니다. ↩︎