programming language

리눅스 C파일 Makefile 만들기 (VMware Ubuntu 20.04 LTS)

jellylucy 2021. 4. 7. 12:37

1. VMware설치 후 그 위에 우분투 20.04 설치

Memory 32GB, Process 2 core

 

2. 터미널 세팅

sudo apt-install gcc

sudo apt-install g++

sudo apt-get install build-essential : 컴파일 세팅 (c언어 같은 고급 언어들을 binary code로 바꿔주는 세팅)

 

3. Ecilpse 설치 

4-1. Eclipse 안에서 가지고있는 c, h파일 넣어서 빌드하기

실패;;;;;;;;;;;;;;;;;;

4-2. makefile 컴파일 

gcc에 대한 개념지식이 부족해서 삽질 중이였다.

2학년 리눅스 자료 복습 중;;;;;;;;;;;;;


C프로그램 빌드 절차

1. 컴파일 : 오브젝트 파일 생성

2. 링크 : 오브젝트 파일들 묶어서 실행파일 a.out 생성

(여기서 소스파일에 정의된 함수를 main에서 호출하는 의존성 발생) 

GCC

1. gcc 개요

gcc는 컴파일러라고 한다. 소스파일을 이용하여 실행 파일을 만들 때까지 필요한 프로그램을 차례로 실행하는 툴.

2. gcc의 기본 사용법

-파일 확장자에 따라 처리 방법을 달리한다.

ex) .c 확장자인 경우 처리방법은 전처리-컴파일-어셈블-링크 과정을 거쳐야 한다.

ex) gcc main.c -> a.out 실행 파일 생성된다.

 

3.gcc 사용 및 옵션 

-옵션 -o : 생성되는 출력 파일의 이름을 지정함.

gcc -o 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

ex) gcc -o main.out main.c

 

-옵션 -c : 소스 파일을 오브젝트 파일로만 컴파일하고, 링크하는 과정은 생략함.

gcc -c 소스파일이름

    $gcc -c -o a.o a.c
    $gcc -c -o b.o b.c
    $gcc -c -o main.o main.c

-c를 하지 않을 시, main함수를 찾을 수 없다는 오류발생

$gcc -o a.out main.o a.o b.o

-그다음 , Object파일들을 한데 묶는 링크 과정을 수행한다.

명령은 gcc지만, gcc 내부적으로 링커(ld)를 실행해서 실행 파일(a.out)을 생성한다.

Make

1. Make 개요

Make란 여러 개의 소스파일로 구성된 프로그램이 있을 때, 수정된 소스 파일만 자동으로 알아내어 컴파일하고

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴.

 

2.Makefile

Makefile은 기본적으로 목표/ 의존관계/ 명령의 세 개로 이루어진 규칙들이 계속적으로 나열되어 있는 텍스트 파일

3. Makefile 주의사항

의존관계의 각 요소를 구분할 때 공백을 사용함.

명령입력할 때 항상 먼저 tab 구분자 사용하기 (space 사용 시, 에러)

 

4. 실습

(1) Makefile 만들기

실행파일 a.out 을 만들기 전에 소스파일 세개 disk.c, fat.c, main.c 에 대한 오브젝트 파일을 만든다.

오브젝트 파일을 만들 때  gcc -c 옵션을 넣는다. 

-> 링크 과정을 생략한다. 실행 파일은 오브젝트 파일 세 개를 갖고 하나를 만들기 때문.

-> 링크 과정포함시, 실행파일 .out 이 세 개 만들어지는 것.

 

(2) 실행결과