쉘스크립트 작성
-> 일반적으로 스크립트 첫번째 줄에 "#bin/sh"를 넣어준다.
이는 bash shell이라는 것을 명시적으로 알려주는 것이며, 생략 가능합니다.
- 생략 가능하나 그럴 경우 시스템의 default shell이 사용됨.
- Shell 종류에 따라 command 및 사용법이 조금씩 다르므로, 명시적으로 선언하지 않을 경우 runtime 오류가 발생 가능합니다.
주석
-> “#”으로 시작하는 Line은 주석으로 인식합니다.
사용자 변수
기본적으로 “변수명=값” 와 같은 형태로 작성한다.
-
변수명에 값을 할당할 때 공백을 넣지 않는다.
-
대소문자 구분
-
변수명에 ? * 문자는 사용 금지
명시적 변수 선언
-
declear 또는 typeset 명령 사용 (bash에서만 사용 가능)
-
옵션
-
‘-i’ : 정수
-
‘-a’ : 배열
-
‘-f’ : 함수
-
‘-r’ : 읽기 전용
-
‘-x’ : Shell 외부에서 사용 가능 변수
gcc option
-o |
output 파일 이름 지정 |
-c |
object 파일 생성 |
-I |
header file 위치 지정 -I<폴더이름> |
-l |
라이브러리 파일 지정 -l<파일이름> |
-L |
라이브러리 폴더 지정 -L<폴더이름> |
- “$@” : 현재 타겟의 이름
- “$^” : 현재 타겟의 종속 항목 리스트
· 확장자 규칙에 의해서 make는 파일들 간의 확장자를 자동으로 인식해서 필요한 작업을 자동으로 수행한다. 위의 예제에서는 자동적으로 아래와 같은 루틴이 자동적으로 동작하게 된다.
.c .o :
$(CC) $(CFLAGS) -c $< -o $@
· make 내부에서 기본적으로 서비스를 제공해 주는 확장자는 다음과 같다.
.out .a .ln .o .c .cc .C .p .f .F .r .y .l .s .S .mod .sym .def .h .info .dvi .tex .texinfo .texi .txinfo
· Makefile내부에서 .SUFFIXES 매크로의 값을 세팅해 주면 내부적으로 정의된 확장자의 연산이 동작을 하게 된다. 따라서 확장자 규칙은 make가 어느 확장자를 가진 파일들을 처리할 것인가를 정해 주는 것이다.
내부 매크로(Internal macro)무엇일까?
make에서는 내부 매크로라는 것이 있다. 이것은 우리가 맘대로 정할 수 있는 매크로는 절대 아니다. 대신 매크로를 연산, 처리하는데 쓰이는 매크로라고 하는 것이 더 적당할 것이다. 아래의 Table 4-1은 내부 매크로에 대해 설명하고 있으며, List 4-11은 내부 매크로를 사용한 예를 보여 주고 있다.
내부 매크로 |
설 명 |
$* |
확장자가 없는 현재의 대상(Target) 파일 |
$@ |
현재의 대상(Target) 파일 |
$< |
현재의 대상(Target) 파일보다 더 최근에 갱신된 파일 이름 (dependency중에서 처음에 위치한 파일 이름) |
$? |
현재의 대상(Target) 파일보다 더 최근에 갱신된 파일 이름 (모든 dependency 파일의 이름) |
main.o : main.c io.h
gcc -c $*.c ($* 는 확장자가 없는 현재의 대상 파일이므로 $* 는 결국 main에 해당된다.)
test : $(OBJECTS)
gcc –o $@ $*.c ($@ 는 현재의 대상 파일이므로 $* 는 결국 test에 해당된다.)
.c .o :
gcc -c $< (또는 gcc -c $*.c)
($< 는 현재의 대상 파일보다 더 최근에 갱싱된 파일 이름이므로, .o 파일보다 더 최근에 갱신된 .c 파일은 자동적으로 컴파일이 된다. 가령 main.o를 만들고 난 다음에 main.c를 갱신하게 되면 main.c는 $<의 작용에 의해 새롭게 컴파일 된다.)
https://lsit81.tistory.com/entry/Bash-Shell-Script
http://doc.kldp.org/KoreanDoc/html/gcc_and_make/gcc_and_make-2.html#ss2.2
https://betterourlife.tistory.com/17
와일드카드
http://korea.gnu.org/manual/release/make/make-cwryu/make-ko_4.html
https://bowbowbow.tistory.com/12