[ProjectE Basic] Make & Makefile / idec 강의

2023. 11. 26. 00:27Embedded

728x90

https://www.youtube.com/watch?v=JhZiIHQ87QE

 


  • make / Makefile

make : 실행명령어 / 하나의 실행 프로그램이라 보면 된다.

실행명령어에 맞는 규칙을 작성해줘야 한다.

 

하나의 파일에 대해 기술하는 것이 Makefile이다. / 확장자가 없는 파일

make는 실행프로그램 / make파일들이 어떤내용들로 실행될 것인지 기술되어 있는 것이 Makefile이라 보면 된다.

 

setup :		// make setup
	mkdir log
    
init_designn : setup	// make init_design
	icc_shell -f .rm_icc2/iinit.tcl
    
place_opt : setup init-design		// make place_opt, 의존성
	mkdir -f ./rm-icc2/place_opt.ttcl // 명령어
    
clean :						// make clean
	rm -rf log
    
//Makefile 기본구조
//타겟명 : 의존성
//		타겟에 기술되어 있는 명령어

 

"make 어플리케이션" 이름의 구조이다.

 

  • ex1)
setup : 
	mkdir ./log
hello : 
	echo "hello" > ./log/hello.txt
clean :
	rm -rf ./log

 

이제 해당 Makefile에서 작성된 make타겟들을 실행해보면

  1. make setup : log라는 디렉토리를 생성
  2. make hello : hello라는 텍스트를 ./log/hello.txt경로의 파일에 저장
  3. make clean : log디렉토리 제거

로 실행 가능하다.

 

 

의존성은 해당 타겟명령이 실행되기 전에 먼저 진행되어야 하는 부분을 기술

 

  • ex2-1)
setup : 
	mkdir ./log
hello : setup 	//setup이 잘 실행되는지 점검하고 hello실행
	echo "hello" > ./log/hello.txt
clean :
	rm -rf ./log

 

  1. make hello : 이제 의존성부분에 setup이 존재하므로 setup실행 후 hello 실행 
    -> log 디렉토리 생성 후 hello 텍스트 파일 생성

 

  • ex2-2)
setup : setup.s // setup.s파일이 있는지 확인
	mkdir ./log
hello : setup 	//setup이 잘 실행되는지 점검하고 hello실행
	echo "hello" > ./log/hello.txt
clean :
	rm -rf ./log

 

make setup : 실행 시

setup.s 파일 존재하지 않을 시 해당 내용 실행

 

setup.s 파일 존재하면 의존성부분을 만족하게 되므로 실행된다.

 

 

  • 변수

변수명 = 값 // 변수 선언 후 값을 저장하여 사용할 수 있다. $(변수명)

 

변수명이 미리 지정되어 있는 것

  1. $@ : 현재의 목표파일 (Target)
  2. $^ : 현재 타겟의 종속 항목 리스트
  3. .PHONY : 실행 규칙을 위한 타겟명으로 사용하기 위한 것
    -> 타겟명으로 사용하는 단어가 파일명으로 있는 경우 충돌이 발생 / 불필요하게 반복하여 실행하는 것을 예방하기 위한 것
  • ex3-1)
APP=hello

setup : setup.s 
	mkdir ./log
$(APP) : setup 	
	echo "hello" > ./log/$(APP).txt
clean :
	rm -rf ./log

 

make hello 실행 시

정상적으로 동작 / APP의 변수 값을 hello로 설정했기 때문

 

  • ex3-2)
APP=hello

setup : setup.s 
	mkdir ./log
hello_world : setup 	
	echo "hello" > ./log/$(APP).txt
    echo "hello" > ./log/$@.txt //$@는 타겟명을 가지고 오기 때문에 타겟명인 hello_world를 가지고 온다.
    echo "hello" > ./log/$^.txt //$^는 의존성값을 가지고 오기 때문에 setup을 변수명으로 가지고 온다
clean :
	rm -rf ./log

 

make hello_world 실행 시

해당 내용들 실행된다.

 

 

  • ex4)
APP=hello

setup : setup.s 
	mkdir ./log
hello_world : setup 	
	echo "hello" > ./log/$(APP).txt
    echo "hello" > ./log/$@.txt 
    echo "hello" > ./log/$^.txt 
log : 
	echo "hello log"
clean :
	rm -rf ./log

 

make log 실행 시 

경로 상 log라는 디렉토리가 존재하므로 make log를 실행불가 / Makefile 입장에선 이미 싱행되어 있다 판단하여 실행되지 않는다.

 

APP=hello

setup : setup.s 
	mkdir ./log
hello_world : setup 	
	echo "hello" > ./log/$(APP).txt
    echo "hello" > ./log/$@.txt 
    echo "hello" > ./log/$^.txt 
log : 
	echo "hello log"
.PHONY:log		//해당 명령어 사용 시 log가 타겟명이라고 Makefile에게 알려준다.
clean :
	rm -rf ./log

 

이젠 make log 실행 시

log 디렉토리가 존재해도 실행된다.