[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
가끔 비교적 큰 m4
응용 프로그램들은 수천개의 기본적인 정의와 다른
값비싼 초기화를 필요로 할 때가 있다.
큰 프로그램에서의 공통되는 기본적인 것들을 읽을 때 매번 같은 것을 반복한
다면 그것은 시간의 낭비다. GNU m4
는 하나의 응용프로그램의
시작부분에서 공통적이고 기본적인 것들을 사용하여 속도의 향상을 꾀하는
장치를 제공한다. 사용자가 반복적으로 사용한다고 가정해보자.
m4 base.m4 input.m4 |
‘base.m4’에는 고정적인 내용을 담고, ‘input.m4’에는 가변적인 내용을 담으면 좋다.
m4 -F base.m4f base.m4 |
처음에 한번 위와 같이 실행시키고, 이후에는
m4 -R base.m4f input.m4 |
이렇게 가변적인 내용으로 실행시킨다. 처음 호출에서 -F
옵션은
‘base.m4’를 읽어서 실행시켜서, 다양한 응용 프로그램에서의 매크로를
정의하거나 다른 초기 화를 계산한다. 단지 한 번만 ‘base.m4’는
완전하게 처리된다. GNU m4
는 ‘base.m4f’를 frozen
파일을 생성하는데, 이것은 m4
의 내부상태를 담은 스탭샷의 한종류를
포함하고 있다.
나중의 호출은 -R
옵션을 포함함으로써 m4
의 메모리 내부
상태를 ‘base.m4f’로 부터 다시 로드할 수 있다. 다른 파일도 물론
읽어들일 수 있다. 이 말은 m4
의 초기버젼과는 달리 이전에 실행된
효과를 재발견한 후에 m4
는 입력을 읽어 들일 것이다. 우리의
예에서는, 그 효과는 ‘base.m4’와 동일하다. 그러나 frozen 파일은
이것보다 훨씬 효과가 빠르기 미친다.
m4
를 실행할 때 한 번에 하나만의 frozen 파일을 만들거나 읽어들일
수 있다. 두 개의 frozen 파일을 한꺼번에 처리하는 것은 불가능하다.
그러나 frozen 파일 이 갱신되어서 증가하였다면 -R
과 -F
옵션을 이용하여 동시에 사용할 수 있다. 예를 든다면, 조심스럽게 다음의
명령을 내린다고 가정하자.
m4 file1.m4 file2.m4 file3.m4 file4.m4 |
이것은 다음과 같이 쪼개진 명령으로 되는 것과 같으며, 출력도 동일하다.
m4 -F file1.m4f file1.m4 m4 -R file1.m4f -F file2.m4f file2.m4 m4 -R file2.m4f -F file3.m4f file3.m4 m4 -R file3.m4f file4.m4 |
이 한 번의 명령으로 그동안 만들어 둔 것이 수포로 돌아갈 수도 있으므로 조
금의 주의가 필요하다. 특수하게 추적(trace) 속성 매크로는 현재
changeword
가 세팅되어 있지 않다면 취급할 수 없다. 한 번의
호출에서 이러한 옵션의 상호작 용은 아직 충분히 분석되지 않을 것이다.
그러나 pushdef
된 스택에 있는 정의는 바르게 핸들할 수 있다.
그래서 undefine
되거나 내장매크로로 이름이 바뀐 것은 인용문자나
주석 문자열을 변경한다.
m4
가 frozen 을 실행할 때, 실행의 끝에서 작동하는 자동적인
전환되돌려 놓 기(undiversion)는 억제된다. 대신에, 명확하게 번호가
붙여진 모든 전환들은 frozen 파일로 저장된다. 활성화된 전환번호도
전송된다.
다시 로드할 frozen 파일은 꼭 현재 작업디렉토리에 있어야 할 필요는 없다.
파 일을 include
할 때와 똑같은 방법으로 경로를 검색한다
(see section 삽입할 파일 검색하기).
frozen 파일은 아키텍쳐를 건너뛰어서 공유가 가능하다. 하나의 머쉰에서
frozen 파일을 알아볼 수 있도록 쓰고, 다른 머쉰에서 같은 m4
를
사용하거나, GNU m4
의 새로운 버전을 사용한다면 그것을 읽어서
처리하는 것이 가능하다. frozen 파일은 편집이 가능한 텍스트 파일이며,
여러개의 지시자로 구성되어 있 다. 각각의 시작은 대문자로 되어 있으며
뉴라인(<NL>)으로 끝난다. 지시자가 있어 야 할 어느곳이나 #
문자는 주석을 만든다. 빈줄은 또한 무시된다. 아래의 설명에 서,
length는 대응하는 string의 길이이다. 숫자는 10진수로
표시한다. 지시자들은 다음과 같다.
V number <NL>
파일의 포맷을 확인한다. number 은 1이어야 한다.
C length1 , length2 <NL> string1 string2 <NL>
string1과 string2를 각각 주석의 시작과 끝 문자열로 사용한다.
Q length1 , length2 <NL> string1 string2 <NL>
string1과 string2를 인용구의 시작과 끝문자열로 사용한다.
F length1 , length2 <NL> string1 string2 <NL>
string1을 내장 명칭인 string2 함수로 pushdef
를
사용하여 정의하며 확장한다.
T length1 , length2 <NL> string1 string2 <NL>
string1을 텍스트 string2로 pushdef
를 사용하여
정의하며 확장한다.
D number, length <NL> string <NL>
현재의 전환의 전환번호를 선택한다. 그리고 현재의 전환으로 string을 복사한다. 존재하지 않는 전환에는 number이 음수가 될 것이다. 단순하게 활성화 번호만 선택한다면, 빈 string을 사용한다. 전환번호가 0 이면 그 문자열은 재로드 될 때 표준출력으로 보내진다. 그러나 이것은 m4 내부에서는 보내지지 못한다.
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated by Autobuild on August 22, 2016 using texi2html 1.82.