Git, CocoaPods, Xcode, Shell
[Shell] ShellScript, Makefile, make (쉘 프로그래밍)
jake-kim
2023. 3. 27. 01:42
Make
- 원래는 실행파일을 생성하는 도구이지만 shell script와 같이 사용하면 script들을 쉽게 관리할 수 있기 때문
- 실행파일의 생성: source code(사람이 읽을 수 있는 코드) 컴파일을 통해 -> object file(기계가 읽는 바이너리 파일) -> exec file
- 원래는 .c 파일을 컴파일하고 자동화할때 유용하게 사용할 수 있는 GNU의 한 종류
- c 를 컴파일할때 변경된 부분만 재컴파일하여 효율적인 컴파일러
- Makefile은 또 여러가지의 source code를 묶어서 하나의 exec 파일로 만들수 있는 장점도 존재
- makefile을 잘 활용하면 build script를 만들었을때 이 build script를 실행하기에 매우 유용한 도구
ShellScript가 있을때 Make와 같이 사용할때의 장점
- ShellScript만 가지고도 원하는 일들을 수행할 수 있지만, Makefile은 조금 더 체계적이기 때문에 처음오는 개발자라도 script의 내용들을 파악하기 용이
- make -j 를 사용하면 병렬적으로 실행도 가능
- 만약 사용자로부터 하나의 입력을 받고, 그 입력 값을 여러개의 shell script에 그대로 넣고 실행하고 싶은 경우, make에서 값을 받아서 여러개의 shell script를 실행하도록하면 매우 쉽게 사용이 가능
Make 사용 방법
- Makefile 생성
$ vi Makefile
- 내용 입력
- Makefile은 .PHONY 키워드로 타겟 이름을 설정
- .PHONY 키워드: '가짜'라는 단어의 포니는, 해당 디렉토리에 test라는 중복된 이름이 있어도 PHONY에 명시된 이름을 실행하게끔하고 성능이 더 좋음
- shell의 명령어는 앞에 골뱅이를 붙여서 사용
# Makefile
.PHONY: test
test:
@echo "this is test"
- 위 test를 실행할땐 terminal에서 make test로 입력
% make test
this is test
- 변수 입력
- 입력은 그냥 키워드 없이 간편하게 =으로 선언
- 사용할땐 ${}로 사용
abc = this is test
.PHONY: test
test:
@echo ${abc}
- 미리 정해진 매크로 상수
- $@: 현재 target의 이름
abc = this is test
.PHONY: test
test:
@echo ${abc}
@echo 현재 target의 이름: $@
결과)
% make test
현재 target의 이름: test
- 만약 타겟을 여러개 실행시키고 싶은 경우, PHONY를 활용하면 매우 쉽게 사용이 가능
- 예제를 위해서 test2 타겟 추가
abc = this is test
.PHONY: test
test:
@echo ${abc}
@echo 현재 target의 이름: $@
.PHONY: test2
test2:
@echo "this is test2"
- 밑에 all이라는 변수를 만들고 콜론으로 위 타겟들을 띄어쓰기 기준으로 나열한 후 .PHONY로 설정하면 커맨드 라인에서 사용 가능
abc = this is test
.PHONY: test
test:
@echo ${abc}
@echo 현재 target의 이름: $@
.PHONY: test2
test2:
@echo "this is test2"
# 이 부분 추가
all: test test2
.PHONY: all
결과) make all로 실행 가능
% make all
this is test
현재 target의 이름: test
this is test2
* 참고
https://sodocumentation.net/makefile/topic/5542/-phony-target