Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

ADONE 코딩하기

[c언어] 리눅스 make 명령 본문

C언어

[c언어] 리눅스 make 명령

피곤하신분 2023. 2. 4. 18:59

[참고] https://velog.io/@hidaehyunlee/Makefile-%EB%A7%8C%EB%93%A4%EA%B8%B0

https://www.tuwlab.com/ece/27193


 

 

1. C 프로그램 빌드 절차

   코드작성  -> 컴파일(object 코드 생성) -> 링크 ( object 파일 묶음) => 실행파일 생성

 

1-1 컴파일

gcc -c - o main.o main.c

옵션 -c : 컴파일만 실행하여 object 파일을 생성함

옵션 -o : 생성할 파일의 이름을 명시함. (main.o)

 

1-2 링크

사전에 생성한 object 파일들을 하나로 합쳐 실행 파일을 생성

사전에 만든 파일 : a.o b.o main.o

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

-o 옵션으로 실행파일명을 명시하고 링크할 파일들을 뒤에 열거함.


2. make 명령

C프로그램을 실행시키거나 업데이트를 할 때 (컴파일 + 링크) 과정이 1 에서 보았듯 복잡하기 때문에 빌드하는 과정을 단축화 하기 위해서 make 명령을 사용함.

 

make 명령의 특징

Incremental build 기능: 반복적으로 빌드하는 과정에서 변경된 소스코드를 빌드하게 될 때 연관된 소스코드들만 간추려서 빌드하는 기능 (의존성_dependency)

       => 프로그램을 빌드할 때 마다 변경점이 없는 소스파일들까지 전부 빌드하게되면 빌드 중 오류를 잡기도 복잡해지고 시간도 오래 걸리므로 의존성에 따라서 빌드하는 것이 작업 효율이 좋음.

 

2-1 make 명령 설정

  • vi Makefile (makefile로 해도되지만, Makefile 권고) 를 통해 makefile 생성
  • makefile 작성
  •  
make

또는

make a.o

처럼 특정 파일만 빌드하거나 전체 파일들을 make명령으로 빌드

 

2-2 makefile 작성 방법

<Target> : <Dependencies>
	<Recipes>
    
//example
a.out : main.o a.o b.o
	gcc -o a.out main.o a.o b.o

Target = 빌드할 대상, 최종적으로 생성되는 파일의 이름

Dependencies = Target이 의존하는 파일 목록, Target 보다 먼저 생성되어야 할 파일 목록

Recipes = 빌드 대상을 생성하는 명령

 

2-3 makefile 변수

내장 변수로 (CC, CFLAGS, TARGET, OBJS 등)과

자동 변수 (@, < 등)를 사용해서 을 사용해 코드를 간략화 함.

(exmaple _ 기본 패턴)

//Makefile
CC=gcc
CFLAGS=-g -Wall
LDFLAGS=<링크 옵션>
LDLIBS=<링크 라이브러리 목록>
TARGET=a.out
OBJS=main.o a.o b.o

$(TARGET) : $(OBJS)
	$(CC) -o $@ $(OBJS)
    
a.o : a.c
	%(CC) -c -o a.o a.c
    
b.o : b.c
	%(CC) -c -o b.o b.c

main.o : main.c
	%(CC) -c -o main.o main.c
    
clean:
	rm $(TARGET) $(OBJS)
  • $@ : 현재 TARGET
  • $^ : 현재 TARGET이 의존하는 대상들의 목록
  • $? : 현재 TARGET이 의존하는 대상들  변경된 것들의 목록
  • $% : TARGET의 이름 (TARGET이 아카이브인 경우

 


gcc 컴파일 옵션 (CFLAGS 변수에 들어갈 옵션) 정리 링크

https://dany-it.tistory.com/213

 

리눅스 gcc 컴파일러 컴파일 옵션

이번 포스팅은 리눅스 gcc 컴파일러 컴파일 옵션에 대해 하겠습니다.리눅스 컴파일러에 대한 설명을 했습니다. 다음은 컴파일러 옵션에 대해 설명하도록 하겠습니다.거의 사용하는 옵션은 정해

dany-it.tistory.com

 

 

 

 

 

'C언어' 카테고리의 다른 글

[C언어] 코드 분석 중 발견한 함수들  (1) 2023.03.01
[C언어] #include 정보  (0) 2023.02.11