본문 바로가기

프로그래밍./Linux Programming

[Linux] Makefile에서의 함수들

Makefile에서의 함수들

쉘 명령어 처리 함수 : shell
문자열 처리 함수들  : subst, patsubst, sort

공백문자 제거 함수  : strip

문자 필터링 함수들  : filter, filter-out, findstring, words, wordlist, word, firstword,
                              join, dir, notdir, suffix, addsuffix, addprefix, basename


변수명이라고 칭하는 것은 아니라 "매크로" or "매크로이름" 이지만. 편의상 변수명이라 칭하겠음.
사용자가 원하는 대로 작성해도 됨. 단, 미리 정해진 이름들은 제외. 구분을 위해서 일반적으로 대문자 사용.

[대상문자]는 변수에 문자를 담고, 그 변수를 사용해도 됨. $(변수명)
모든 함수의 결과는 변수에 넣을 수 있으며, 바로 출력도 가능하다.

make -f 메이크파일명   을 사용하면 make 시 사용할 Makefile을 지정할 수 있다.

shell, subst, patsubst

$(shell 쉘 명령어)
shell 명령에 대한 결과를 저장한다. $(변수명) <- 이 자리에 해당 결과가 들어가는 셈이다.
 
$(subst 찾을 문자, 변경할 문자, 대상 문자)
[대상문자]에서 [찾을 문자]를 [변경할 문자]로 변경해준다. 

$(patsubst 찾을 패턴, 변경할 패턴, 대상 문자)
subst와 기능은 동일하나, 확장자를 바꿀 때 사용하는 듯.

[Makefile_1]


결과 






$(매크로명:패턴=패턴), sort, strip


$(대상문자:찾는패턴=변경할패턴)
[대상문자] 의 내용 중 [찾는패턴]을 찾아서 [변경할패턴]으로 바꿔서 저장한다.
실제로 변경이 되거나 하는게 아니라 그냥 단순히 해당 문자를 찾아 바꾸는 것. 
여기서만 유일하게 $(변수명) 이 아닌 변수명 을 사용한다.  대상문자 = 변수명.
patsubst와 동일한 기능(?)

$(sort 대상문자)   [대상문자] 에서 정렬해 준다 

$(strip 대상문자)  [대상문자] 에서 모든 공백을 1칸으로 줄인다. 여백이 많아도 모두 1칸으로.

[Makefile_2]

결과







filter, filter-out, findstring, 


filter
$(filter 찾을문자, 대상문자)
[대상문자]에서 [찾을문자]를 포함한 문자들을 찾아서 저장한다. [대상문자]는 여러개 지정이 가능하다. 
구분자 없이 [대상문자]를 계속 쓰고 [대상문자를]와 구분할 때 한번만 콤바를 사용한다.

filter-out
$(filter 찾을문자, 대상문자)
filter와 반대로 찾아서 그 문자들은 제외한 나머지들을 저장한다. 사용법은 동일.
즉, 찾을문자가 포함되지 않은 문자들을 저장한다.

findstring
$(findstring 찾을문자, 대상문자)
[대상문자]에서 [찾을문자]만 뽑아서 저장한다. 없는 경우 공백으로 나온다.

word, words, wordlist
$(word, 위치, 대상문자)     [대상문자]에서 [위치]번째 단어를 뽑아낸다.
$(words, 대상문자)           [대상문자]에 단어의 개수를 알려준다.
$(wordlsit, 위치1, 위치2, 대상문자)  [대상문자]에서 [위치1]부터 [위치2]까지 단어를 알려준다.

[Makefile_3]

결과






firstword, join, dir, basename

firstword
$(firstword 대상문자)    [대상문자]에서 첫 단어를 알려준다.

join
$(join 원본문자, 붙일문자)  
[원본문자]에 [붙일문자]를 붙여서 한 문자열로 만든다.

원본문자 원본문자, 붙일문자 붙일문자    처럼 여러가지도 된다. 원본문자와 붙일문자 사이만 구분자로 콤마를 사용.
[원본문자]와 [붙일문자] 가 차례대로 붙는다. [원본무자] 2개에 [붙일문자]가 1개이면 첫 [원본문자]에만 붙는다.


dir
$(dir 대상문자)   [대상문자]에서 파일명을 제외한 경로만 추출해준다. 사실상 "/" 전까지만 뽑아내는 셈이다.

notdir
$(notdir 대상문자) [대상문자]에서 경로를 제외한 파일명만 추출해준다. 사실상 마지막 "/" 뒤의 글자를 뽑아내는 셈.


basename
$(basename 대상문자) [대상문자]에서 확장자를 제외한 문자를 알려준다. 경로가 있으면 경로도.
                                  사실상 "." 전까지 모든 글자를 뽑아내는 셈.

[Makefile_4]


결과








suffix, addsuffix, addprefix

$(suffix 대상문자)                        [대상문자]에서 확장자만 추출한다.   사실상 "."과 그 이 후 글자를 뽑아내는 셈.
$(addsuffix 변경문자, 대상문자)    [대상문자]에서 확장자를 바꿔준다.    사실상 "." 이 후의 글자와 바꾸는 셈.
$(addprefix 추가문자, 대상문자)    [대상문자]의 앞에 [추가문자]를 붙인다. [추가문자] 쓰고 [대상문자]를 붙이는 셈.

[Makefile_5]

결과


유용한 정보가 되셨다면 아래 손가락 버튼 한번 눌러주세요 ^-^