rlo-lo 2024. 10. 18. 00:59

Make

파일의 종속관계 확인 

수동으로 오브젝트 파일 일일히 관리하기 번거로움

 

makefile :  룰들의 집합. 룰(dependency, recipe)

 

Make command and makefile

모듈. 의존성을 make 파일(스크립트) 형태로 표현함

의존관계 / 타겟을 만들기 위한 gcc command

 

makefile로 실행파일을 만들 수 있다. 

 

1. dependency

타겟과 의존파일 

2. recipe

타겟을 생성하기 위한 command 집합. tap으로 구분

 

Preparing and Running Make 

make 사용을 준비하려면,, 프로그램에 있는 파일 간의 관계를 설명하고 각 파일을 업데이트하는 명령을 제공하는 makefile이라는 파일을 만들어야 한다. 

프로그램에서 실행파일은 소스파일을 → 컴파일하여 생성되는 목적파일에서 업데이트 된다. 

make프로그램은 makefile 데이터베이스와 파일의 마지막 수정시간을 사용해 업데이트 해야할 파일을 결정한다. 

 

$ make

 

 

타겟파일에서 시작!  

의존파일이 더 최신이면  타겟을 생성 → 레시피에 의해서 만들어주기 

의존파일 old → 레시피 작동 x

 

TIME STAMP : 수정시간

 

How make processes a makefile

 

 

main.c 가 최신이기 때문에 main.o는 재컴파일 되어야 한다. 

→ sum 보다 main.o가 최신이 된다. →  sum 다시 만들어진다. 

 

$make 
gcc -c main.c
gcc -c sum.c
gcc -o sum main.o sum.o 

$make 
make: 'sum' is up to date;. 

$touch sum.c //실제 수정 없이 수정시간만 업데이트
$make
gcc -c sum.c
gcc -o sum main.o sum.o

 

 

Phony Targets

$make clean // 타겟명
rm -rf sum *.o 

$make everything 
rm -rf sum *.o 
cp main.c main_bak.c
cp sum.c sum_bak.c

$ls 
main_bak.c main.c Makefile sum_bak.c sum.c sum.h

 

 

How to use Variables

문자열로 변수 이름 정의한다. ( 이미 정의된 것들 제외)

참조할 때는 $ (변수이름)

 

 

Automatic Variables

$@ : target

$< : dependence files