본문 바로가기

Linux/Linux

Make 파일에 대한 정리 (두서 없다 다시 정리해야 함)



.SILENT :

특수 내장 타겟으로 모든 명령에 대한 명령 에코 기능을 끝다. 


'-'

make는 명령 한 행을 수행 후 매번 리턴값을 체크해 0이 아닌 값이 리턴된 경우 수행을 종료한다. 

만약 열령이 비정상적으로 수행되어 0이 아닌 값이 리턴되더라도 계속해서 수행을 하기 위해서 '-'을 앞에 붙여야 한다. 

예는 다음과 같다. 

ex) cat : 

-cat file.txt

@echo done 

위의 예제는 file.txt가 있던지 말던지 done을 출력하게 된다.


.IGNORE :

망약 기술파일 전체에 명령 오류를 무시하고 싶다면 내장 타겟으로 .IGNORE를 선언하면 된다. 

쉘 변수 참고 

기술파일 내에서 쉘 변수를 참조하려면 $${변수명} 과 같이 $ 기호를 두 개 붙여주고 중괄호로 묶거나 $$ 변수명 과 같이 괄호를 붙이지 않는다. 


자동 매크로 리스트 


$? 현재의 타겟보다 최근에 변경된 종속 항복 리스트 (확장자 규칙에서 사용불가)

$^ 현재 타켓의 종속 항목 리스트 (확장자 규칙에서 사용불가)

$@ 현재 타켓의 이름 

$< 현재 타켓보다 최근에 변경된 종속 항목 리스트(확장자 규칙에서만 사용가능)

$* 현재 타켓보다 최근에 변경된 현재 종속 항목의 이름 (확장자 제외) (확장자 규칙에서만 사용가능)

$% 현재의 타킷이 라이브러리 모드일 때 .o 파일에 대응되는 이름


매크로의 대입 기럽 


NAME1 = string  재귀적 확장 매크로 ( 재귀적으로 치환된다.)

A = $(B) BB

B = $(C) CC

C = D

$(B)는 $(C) CC로 치환되고 $(C) 는 D로 치환된다 즉 출력 결과는 당므과 같다. 

D CC BB 

NAME1 := string 단순확장 매크로 

재귀적으로 확장되는 매크로와 다르게 변수로 사용한 $(B)가 선언되지 않았으므로 무시하고 NULL 처리 되고 BB만 출력 된다. 


NAME1 += string 기존이 매크로에 공백을 두고 현재의 문자열을 덧붙인다. 

NAME1 ?= string 



Autotools


configure.ac 에 Makefile이 필요로하는 사항들을 기록한다. 

Makefile.am에 이들 가변수를 사용하여 Makefile의 초안을 작성한다. 

configure 실행시에 configure.ac에 지정한 항복들이 check 되면서 Makefile.am 에서 필요한 정보들이 유효한 값들로 치환된다. 

Makefile.am이 유효한 값들을 가지면서 Makefile이 된다. 


configure.ac

autoconf, automake의 입력값 

autoconf는 이를 makefile.am과 함께 받아 makefile.in을 만든다. 

Makefile.am

automake의 입력값

기본적인 Makefile의 틀을 지니고 있지만 configure에 따라 결정되는 변수들을 사용하고 있다. 

Makefile.am은 해당 소스를 컴파일 하고자 하는 위치면 어디든 놓이게 된다. 

가상 상위 Directory의 Makefile.am에는 컴파일 할 하위 directory를 정하게 된다. 

configure.ac에 정의되고 configure를 통해 유효값들을 가지게 되는 변수를 가져오기 위해 @variable@을 사용한다. 

_PROGRAMS, _SCRIPTS, _SOURCES 등 지정된 primary 들이 있고 앞에 인스톨될 위치나 프로그램명, 프로그램의 소스등을 지정하게 되어있다.

예)

hello.c 의 Makefile.am


   PFLAG = @PFLAG@ : configure 를 통해 알아낸 값 가져옴

 bin_PROGRAMS = world :  컴파일후의 프로그래명 지정

     world_SOURCES = hello.c :  해당 프로그램의 소스지정

 AM_CFLAGS = $(PFLAG) :  컴파일시의 flag 지정 macro

 


How it works


aclocal : configure.ac -> aclocal.m4

autoheader : configure.ac + aclocal.m4 -> config.h.in

autoconf : configure.ac + aclocal.m4 -> configure

automake : configure.ac + aclocal.m4 + Makefile.am -> Makefile.in

configure : Makefile.in -> Makefile

'Linux > Linux' 카테고리의 다른 글

유닉스 파일 디스크립터  (0) 2016.06.03