개요

해당 교재와 자료는 macOS Catalina 10.15.7 / GNU make 3.81 기준으로 작성되었습니다.


실습 대상 : C 프로그래밍 입문자 실습 목표 : Makefile 작성법을 익혀 우리의 생산성을 증진 시켜봅시다. 실습 시간 : 약 1시간 실습 자료 : 깃허브 레포지토리 - 해당 레포를 클론하여 실습을 진행합니다.

목차

사전 학습

Makefile 이란?

make 란?

make는 소프트웨어 개발을 위해 유닉스 계열 운영 체제에서 주로 사용되는 프로그램 빌드 도구이다. 여러 파일들끼리의 의존성과 각 파일에 필요한 명령을 정의함으로써 프로그램을 컴파일할 수 있으며 최종 프로그램을 만들 수 있는 과정을 서술할 수 있는 표준적인 문법을 가지고 있다.

Makefile 이란?

Makefile은 프로그램을 빌드하기 위해 make 의 문법에 따라 작성하는 문서

소스코드는 어떻게 실행파일이 되는가?

먼저 프로그램을 빌드하기 위해 컴파일러가 하는 일을 알아봅시다.

hello.c 소스파일을 → hello 실행파일로 빌드하기 위해 우리는 쉘에 gcc hello.c 명령을 치면 된다는 것을 알고 있습니다. 하지만 실제 이 단순한 명령이 실행파일을 빌드하는데에는 총 네 가지 단계가 존재합니다.

<aside> 💡 전처리 단계 → 컴파일 단계 → 어셈블 단계 → 링크 단계

</aside>

아래 이미지와 함께 각 단계를 설명드리겠습니다.

1. 전처리 단계

gcc에서 가장 먼저 작동하는 단계로 전처리기가 소스 파일 내의 전처리기 지시자를 처리합니다. 전처리기 지시자는 #으로 시작하고 세미콜론 없이 개행문자로 종료되는 라인 입니다. 이 단계를 거치면 소스파일 hello.c 로 부터 ****확장 소스파일 hello.i 을 생성합니다.

전처리기 지시자 예시

#include : 지정된 특정 파일의 내용을 해당 지시자가 있는 위치에 삽입

#define : 매크로 함수 및 상수 정의에 사용, 코드 내의 해당 상수를 프로그래머가 정의한 문자열로 대체

2. 컴파일 단계

일반적으로 우리가 사용하는 컴파일이라는 용어는 넓은 의미로 이 네가지 단계를 모두 포함하는 작업을 뜻하지만 여기서의 컴파일 단계는 좁은 의미로서 컴파일러가 전처리된 파일 hello.i 로 부터 어셈블리어로 된 파일 hello.s 를 생성합니다.

3.어셈블 단계

어셈블리어 파일 hello.s 를 기계어로 된 오브젝트 파일 hello.o 로 변환합니다.

4. 링크 단계

오브젝트 파일은 사용한 라이브러리 함수(wirte, printf 등)에 해당하는 코드가 없기 때문에 실행될 수 없습니다. 또한 여러 파일로 이루어진 프로그램의 경우에도 파일간의 연결이 이뤄지지 않아 실행될 수 없습니다. 링크 단계는 라이브러리 함수와 오브젝트 파일들을 연결해서 실행 가능한 파일을 생성합니다. hello.o → hello

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d3dad1cf-7d90-48b9-aa45-142d5aab0ab9/Untitled.png