728x90
반응형

나는 프로그래밍을 처음 배울 때 컴파일(Compile) 또는 빌드(Build)라는 용어의 개념을 구분해본적이 없었다.
간혹(또는 자주) 주변 사람들도 두 용어를 같은 의미로 함께 사용하기도 하는 것 같았다.

하지만 굳이 따지자면 두 용어는 다른 의미를 지니고 있다.
C언어는 사실 컴퓨터가 이해할 수 있는 언어는 아니고 사람이 읽고 쓸 수 있는 언어이다. 이런 C 언어를 컴퓨터가 이해할 수 있는 언어(기계어)로 번역하는 것이 컴파일(Compile) 이고, 컴파일을 해주는 놈을 (Compiler) 라고 부른다.

그리고 이렇게 컴파일되어 기계어로 작성된 파일을 오브젝트(Object) 파일 이라고 부르는데, 이 오브젝트 파일들과 라이브러리 파일들을 연결시켜 최종적으로 실행파일을 만들게 된다.
이렇게 연결시키는 작업을 링크(Link), 연결시키는 작업을 해주는 놈을 링커(Linker) 라고 부른다. 이렇게 링크를 거치고 나면 최종적으로 실행파일이 생성되게 된다.

마지막으로 빌드(Build)는 이런 일련의 과정을 통칭하는 표현이다.
다시 말해 "빌드 해라" 라는 말을 풀어쓰면 "작성한 코드를 기계어로 번역하고 필요한 파일들을 연결시켜 실행파일을 만들어라" 라는 말이 되는 것이다.

이해를 돕기위해 Visual Studio를 사용하지 않고 간단한 프로그램을 하나 만들어 보았다.
보통 Mac에서는 Xcode를 설치할때 gcc라는 컴파일러가 함께 설치되는데 이것을 이용해 터미널에서 컴파일을 해보자.
터미널에 'gcc -v' 를 입력했을 때 아래와 같이 정보가 나오면 gcc가 설치되어있는 것이다.

$ gcc -v

Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 12.0.5 (clang-1205.0.22.11)
Target: x86_64-apple-darwin20.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

아무 텍스트 에디터나 열어 아래와 같이 코드를 작성하고 'CompileTest.c'라고 저장해보자.

#include <stdio.h>

int main()
{
  printf("Hello world!\n");
  return 0;
}

그리고 터미널에 아래와 같이 gcc 를 이용해서 작성한 파일을 컴파일하면
[fileName]에 입력한 이름으로 실행파일이 생성된다.

$ gcc -o [fileName] CompileTest.c

생성된 실행파일을 실행시키면 'Hello world!'가 잘 출력되는 것을 확인할 수 있다.
Visual Studio를 이용하면 마술처럼 완성되는 실행파일이 사실 이런 과정을 거쳐 만들어지게 되는 것이다.

728x90
반응형

+ Recent posts