Metaconfig - 클라우드에서의 온라인

이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 제공업체에서 실행할 수 있는 Metaconfig 명령입니다.

프로그램:

이름


Metaconfig - 구성 스크립트 생성기

개요


메타 구성 [ -dhkmostvwGMV ] [ -L DIR ]

기술


메타 구성 구성 스크립트를 생성하는 프로그램입니다. 당신이 무엇을 모른다면
스크립트 구성은 다음으로 건너뛰세요. 이용 가이드 이 매뉴얼 페이지의 섹션. 네가 원한다면
사용 방법에 대한 전체(공식) 설명 메타 구성 및 그 단위는 다음을 참조하십시오.
명시 부분. 다음은 지식이 풍부한 분들을 위한 빠른 소개 및 참고 자료입니다.
사용자.

메타 구성 세트에서 작동 단위 Metaconfig가 알고 있는 모든 것을 정의합니다.
이식성. 각 단위는 독립적이며 어디에도 등록할 필요가 없습니다.
공개 U 디렉토리나 개인 U 디렉토리에 포함시키는 것 외에는. 만약에
dist 패키지(metaconfig가 일부임)가 LIB에 설치된 다음 공용 U
디렉터리는 LIB/dist/mcon/U입니다. 이 시스템에서 LIB 디렉터리는 /usr/share/dist입니다. 당신의
개인 U 디렉터리(있는 경우)는 패키지의 최상위 디렉터리에 있습니다.
달리기 전에 메타 구성 다음과 같은 몇 가지 작업을 수행해야 합니다.

· 다음을 실행하여 패키지의 최상위 디렉터리에 .package 파일을 만듭니다. 팩키니트.
이 프로그램은 귀하의 패키지에 대해 질문하고 귀하가 말한 내용을 기억하여
모든 dist 프로그램은 똑똑할 수 있습니다.

· 용어집(LIB/dist/mcon)을 참조하고 쉘 스크립트와 C 프로그램을 작성하십시오.
Metaconfig가 정의하는 방법을 알고 있는 기호 측면에서. 굳이 말할 필요는 없어
Metaconfig가 어떤 기호를 사용했는지 알아낼 것입니다.

· 종속될 Makefile 또는 쉘 스크립트를 작성하는 데 필요한 .SH 스크립트를 생성합니다.
구성에 의해 정의된 값에 대해. 라는 프로그램이 있습니다. makeSH 당신을 도울 것입니다.
일반 스크립트를 script.SH 템플릿으로 변환합니다. 일부 편집은 여전히 ​​필요합니다.
결과 .SH 파일에서 수행되어 변수 구성 부분을
스크립트의 상단 부분(다음에 의해 생성된 인라인 주석 참조) makeSH .SH 내에서
파일).

· 최상위 디렉토리에 MANIFEST.new 파일을 생성하여 다음의 모든 파일을 나열합니다.
당신의 패키지. 이 파일은 비공개로 유지되며 최종 파일의 일부가 되지 않습니다.
분포. (편의상 MANIFEST 파일은 다음에서 사용됩니다. 메타 구성 if
아직 MANIFEST.new 파일이 없습니다.) 파일 이름은 각 파일의 첫 번째 필드여야 합니다.
선. 공백 뒤에 파일을 설명하는 짧은 주석을 추가할 수 있습니다. 오직
소스 파일이 거기에 나열되어야 합니다. 특수 파일 패치 레벨.h (이것은
패치 도구에 의해 처리 및 유지 관리됩니다. -- 참조 (1))은
MANIFEST.new 파일이지만 일부 도구에서는 자동으로 무시될 수 있습니다. 경험상,
RCS에서 관리하는 파일만 여기에 나열되어야 합니다. 패치 레벨.h 파일 존재
한 가지 중요한 예외.

· 선택적으로 내보낸 버전이 될 MANIFEST 파일을 생성할 수 있습니다.
귀하의 MANIFEST.new. 해당 파일은 릴리스의 일부로 만들어져야 합니다. 즉, 두 릴리스 모두에 나열되어야 합니다.
MANIFEST.new 및 MANIFEST 자체. 중 하나 메타 구성 유닛은 이것에 대해 알고 있습니다
파일을 확인하고 구성이 릴리스 확인을 수행하도록 강제하여 모든 파일을 확인합니다.
배포판의 일부가 나열되어 있습니다. MANIFEST 및 MANIFEST.new 파일은 다음과 같아야 합니다.
링크가 아니라 구별되어야 합니다.

· 수정하려는 .U 파일을 개인 U 디렉터리에 복사합니다. 모든 .U 파일
개인 U 디렉토리에 있는 디렉토리가 공개 U 디렉토리에 있는 디렉토리보다 우선적으로 사용됩니다.
예배 규칙서. 예를 들어, 어떤 유닛을 강제로 포함시키는 한 가지 방법은 End.U를 복사하는 것입니다.
파일을 .U 디렉토리에 추가하고 종속 항목으로 원하는 유닛의 이름을 추가하세요.
?MAKE: 라인의 끝. 특정 유닛은 이런 방식으로만 강제할 수 있습니다.
Warn_*.U 및 Chk_*.U 형식입니다. 특정 기본값을 사용자 정의할 수도 있습니다.
Myinit.U를 패키지의 개인 U 디렉터리에 복사하여 변수를 구성하고
해당 단위에 변수를 설정합니다.

이제 달릴 준비가 되었습니다. 메타 구성. 그러면 구성 파일 및 선택적으로
구성_h.SH 파일(소스에서 C 기호를 사용하는 경우) 생성된 파일은
필요한 경우 MANIFEST.new에 자동으로 추가됩니다. 업데이트하는 것을 잊지 마세요.
MANIFEST 파일.

새 장치를 생성하려면 다음을 수행하십시오.

· 유사한 유닛을 새로운 .U 파일로 복사합니다. 선택한 이름은 다음의 이름이어야 합니다.
장치에서 생성된 변수입니다. 이는 단지 사용자의 편의를 위한 것일 뿐,
요구 사항. 파일 이름이 잘리는 것을 방지하려면 12자 이하여야 합니다.
실제로 RCS를 사용하려는 사람들이 사용할 수 있도록 아마도 10개 이하가 되어야 할 것입니다.
a .U,v 끝에 잘리지 않고 표시됩니다. Metaconfig는 첫 글자의 대소문자를 사용하여
이 장치에서 실제로 변수가 생성되는지 확인하므로 대문자로 사용하지 마십시오.
쉘 변수를 생성해야 하는 경우 유닛 이름입니다.

· 원하는 대로 새 .U 파일을 편집합니다. 첫 번째 ?MAKE: 라인은
의존성; 최종 목록 콜론 앞에는 이 장치가 정의하는 모든 변수가 있습니다.
마지막 콜론 뒤에는 이 단위가 의존하는 모든 변수(또는 다른 단위)가 표시됩니다.
이 목록이 정확하다는 것은 매우 중요합니다. 종속성이 선택사항이고
기본값을 사용할 수 있는 경우 종속성 앞에 '+' 기호를 붙여야 합니다. 그만큼
실제로 필요한 경우가 아니면 기호를 계산하기 위해 해당 단위가 로드되지 않습니다.
다른 단위로.

· 가능한 한, 다음에 정의된 쉘 변수를 기반으로 장치를 매개변수화하십시오.
?INIT: 라인. 그러면 변수 정의가 Init.U 유닛으로 이동됩니다.
Init.U 다음에 포함된 Myinit.U의 정의에 의해 재정의될 수 있습니다.

· ?H: 라인으로 원하는 C 기호의 정의를 추가합니다. 다음으로 시작하는 줄
?H:?%<: .U 파일의 내용은 다음과 같은 경우에만 최종 config.h 파일에 추가됩니다.
Metaconfig는 이 장치가 필요하다고 결정합니다. %<는 장치 이름을 나타냅니다.
다음을 따랐다면 이는 파일 이름이기도 합니다(.U 제외).
협약. 변수 중 하나인 경우 항상 각 ?H: 행에 주석을 추가하세요.
줄 앞부분의 대체는 주석을 마치지 않고 시작합니다. 모든 쉘
d_로 시작하는 변수가 이런 일을 할 수 있으므로 주의하세요. ?%<:를 생략하면
Metaconfig는 정의가 필요한 기호를 직관하려고 시도합니다.
config.h에 포함됩니다.

· 용어집 정의를 ?S: 쉘 변수용 줄 및 ?C: C용 줄로 추가합니다.
전처리기 변수. 예를 보려면 현재 단위를 참조하세요. 매우 중요합니다
각 항목은 왼쪽 맞춤 기호 이름으로 시작하고 각 항목은 ?C:로 끝납니다. 또는
?에스:. 선. C 전처리기 기호 항목을 변환하는 알고리즘
config.h에 대한 주석 용어집은 이에 따라 달라집니다.

· 모든 순서를 확인하세요. 라인 맞습니다. 올바른 순서는 다음과 같습니다.

?RCS: 및 ?X: 기본적으로 주석입니다.
?MAKE: 메타 구성 종속성
?Y: 단위 레이아웃 지시문
?S: 용어집 셸 정의
?C: 용어집 C 정의
?H: config.h 정의
?M: confmagic.h 정의
?W: 원하는 기호
?V: 보이는 기호
?F: 본 기기에서 생성된 파일
?T: 사용된 임시 쉘 기호
?D: 선택적 종속성 기본값
?O: 더 이상 사용되지 않는 단위를 표시하는 데 사용됩니다.
?LINT: 금속성 힌트
?INIT: 쉘 기호 초기화

다음은 줄의 순서와 허용되는 다양한 형식을 보여주는 예입니다.

?RCS: $RCS-ID$
?RCS: 저작권 정보
?RCS: $RCS-로그$
?엑스:
?X: 인위적인 예
?엑스:
?MAKE:d_one XNUMX: XNUMX +XNUMX XNUMX
?MAKE: -$@% 추가 선택
?Y:기본값
?S:d_one:
?S: 첫 번째 쉘 기호, 조건부로 ONE을 정의합니다.
?에스:.
?S:두:
?S: 두 번째 쉘 기호, XNUMX에 대한 값.
?에스:.
?원뿔:
?C: 첫 번째 C 기호.
?씨:.
?C:둘:
?C: 두 번째 C 기호.
?씨:.
?H:#$d_one XNUMX /**/
?H:#define TWO "$two"
?H:#$d_one ONE_TWO "$two"
?시간:.
?M:플립: HAS_FLIP
?M:#ifndef HAS_FLIP
?M:#define 플립(x) 플롭(x)
?M:#endif
?중:.
?W:%<:one_two
?V:p_XNUMX p_two:p_three
?F:파일 ./ftest !tmp
?T:tmp var
?D:two='undef'
?LINT:XNUMX개 변경
?INIT:two_init='2'
: 유닛을 구현하는 쉘 코드는 다음과 같습니다.
p_one='하나'
p_two='두'
p_세=""

한 번 더 말하겠습니다. 위의 단위 정의는 모조품 하나만 보여주기 위한 것
다른 가능성. 그런 유닛은 어쨌든 거의 쓸모가 없을 것입니다... 좀 더
고급 기능은 여기에 설명되어 있지 않습니다. 다음을 참조하세요. 명시 더 많은 섹션
완전한 정보.

· 장치를 적절하게 공용 또는 개인 U 디렉토리에 넣습니다.

· 재방송 메타 구성.

· 귀하의 장치를 다음으로 보내십시오. ram@acri.fr (Raphael Manfredi) 마스터 카피에 포함시키기 위해,
그것이 일반적인 관심사라고 생각한다면.

찾을 새 프로그램을 추가하려면 다음을 수행하십시오.

· Loc.U를 편집하고 ?MAKE: 줄(줄 사이)에 프로그램 이름을 추가합니다.
두 개의 콜론) 및 loclist 또는 trylist(프로그램이 지원되는지 여부에 따라 다름)
필수 여부).

· 메타 구성을 다시 실행합니다.

· 일반적인 내용이라고 생각되면 마스터 카피에 포함되도록 귀하의 장치를 나에게 보내주십시오.
관심.

.U 파일 작성 시 참고 사항:

* rm이 기본적으로 대화형인 시스템이 있으므로 항상 "rm -f"를 사용하십시오.

* '--'는 모든 쉘에서 작동하지 않으므로 "set -- ..."를 사용하지 마십시오. "세트 x ...;
옮기다".

* unset은 완전히 이식 가능하지 않으므로 "unset ENV"를 사용하지 마십시오. 대신 "ENV=''"라고 말하세요.

* 유니스 시스템 때문에 항상 echo " "(공백 포함)를 사용하세요.

*만 사용 test -r, -w, -f 또는 -d가 유일한 휴대용 스위치이기 때문입니다. ~ 안에
특히 "test -x"는 피하세요.

* V7과 함께 제공되는 프로그램만 사용하여 모든 사람이 해당 프로그램을 가지고 있음을 알 수 있습니다.

* 조건부로 grep하려는 경우 $contains를 사용하십시오. 모든 grep이
합리적인 상태. '>/dev/null을 사용하여 출력을 /dev/null로 리디렉션해야 합니다.
2>&1'.

* 모든 sh가 후자의 구성을 아는 것은 아니기 때문에 "if [...]" 대신 "if test"를 사용하십시오.

* 쉘 이스케이프 및 기본값을 수행할 수 있도록 입력에 myread 스크립트를 사용하십시오.
평가. 일반적인 형태는

케이스 "$grimble" in
'') dflt=452;;
*) dflt="$grimble";;
그 C
rp='그리블이 몇 개나 있나요?'
. ./myread
그림블="$ans"

* 선택사항을 가지기 위해 파일 경로명을 요청할 때 getfile 스크립트를 사용하십시오.
~ 이름 확장 및 온전성 검사. 전체 설명은 Getfile.U 유닛을 참조하세요.

* 항상 넣어두세요

$startsh

시작되거나 제공될 모든 생성된 스크립트의 상단에
구성.

* 객체 파일이 다음으로 끝나는 사실과 같은 일반적인 UNIX-ism을 가정하지 마십시오. .o
도서관 이름이 다음으로 끝나는 것 .a. 사용 $_o$_a 대신 변수(참조
유닉스.U).

* 컴파일-링크-실행 테스트를 수행할 때 항상 다음과 같이 작성하십시오.

$cc $ccflags $ldflags try.c -o $libs 시도

일부 시스템에서는 컴파일하기 전에 연결 플래그를 지정해야 하기 때문입니다.
대상(후행 연결 라이브러리 제외).

* 출력을 리디렉션하기 위해 '>&4'를 사용하여 파일 설명자 #4에 중요한 메시지를 발행합니다.
해당 메시지만 표시됩니다. -s 스위치가 주어진다 구성 를 시청하여 이에 대해 더 많은 정보를 얻을 수 있습니다.
명령줄(자동 모드)

* 항상 가장 구체적인 방식으로 기능이 존재하는지 확인하려고 노력하십시오.
libc를 grep할 수 있으면 "if bsd"라고 말하세요. 시중에는 하이브리드 시스템이 많이 있으며,
각 기능은 저절로 서거나 떨어져야 합니다.

* 항상 가장 일반적인 방식으로 기능이 존재하는지 확인하려고 노력하십시오.
다른 패키지는 귀하의 장치를 사용할 수 있습니다.

* 의심스러운 경우 기본값을 설정하고 문의하세요. 아무것도 가정하지 마십시오.

* 사용자가 틀렸다고 생각한다면, 그 사용자가 맞을 수도 있다는 사실을 인정하십시오. 을 위한
예를 들어, 그는 자신이 사용할 시스템이 아닌 다른 시스템에서 구성을 실행 중일 수 있습니다.
최종 제품에.

Metaconfig는 디렉터리에 다음 이름을 예약하며, 그러한 이름을 사용하면
방해를 받거나 다른 예상치 못한 영향을 미칠 수 있습니다.

.산/*
구성
구함
시대에 뒤 떨어진
구성
구성_h.SH
confmagic.h
유/*
매니페스트.new

또한 구성은 실행되는 디렉터리에서 이러한 이름을 방해할 수 있습니다.

유/*
config.sh
구성.h

옵션


다음 옵션은 다음에서 인식됩니다. 메타 구성:

-d 디버그 모드를 켭니다. 디버깅을 하지 않는 한 별로 유용하지 않습니다. 메타 구성
자체.

-h 도움말 메시지를 인쇄하고 종료합니다.

-k 임시 디렉토리를 유지하여 다음에서 사용되는 작업 파일을 검사할 수 있습니다.
메타 구성 당신을 구축 구성 스크립트. 디버깅할 때만 유용합니다.
단위.

-m 많은 메모리와 스왑 공간을 가정합니다. 이렇게 하면 기호 검색 속도가 빨라집니다.
메모리를 희생하면서 상당한 시간이 소요되는 소스 파일
소비...

-o 더 이상 사용되지 않는 기호를 새 기호에 매핑합니다. 아직 여유가 있는 경우 이 스위치를 사용하세요.
소스 코드에 사용되지 않는 기호가 있으며 제거를 원하지 않거나 제거할 수 없음
지금은 그들입니다. 더 이상 사용되지 않는 기호는 무시됩니다.
당신에게 경고를 줄 것입니다 메타 구성.

-s 무음 모드를 켜세요.

-t 발견된 기호를 추적합니다.

-v 상세 모드를 켭니다.

-w 원하는 파일이 최신이라고 가정합니다. 시간과 기억을 건너뛰게 됩니다.
소스 코드 스캐닝 단계를 소비하고 알려진 기호를 찾습니다. 그걸 써
소스 파일이 다음과 관련하여 변경되지 않았다는 것을 알고 있는 경우에만
수영장 메타 구성 사용된 기호.

-G GNU도 제공하세요 구성-생성된 프런트 엔드와 유사 구성
스크립트도 배포판에 포함됩니다. 이건 포장지일 뿐이야
주변 구성 자연스럽게 스크립트를 작성하지만 익숙한 사람들이
새로운 배포판을 접할 때 GNU 도구는 손실되지 않습니다.

-L DIR 기본 라이브러리 위치를 재정의합니다. 일반적으로 metaconfig에만 유용합니다.
유지보수 담당자는 개발 중인 장치를 로컬에서 사용하는 대신
공개적으로 사용 가능한 것들. NS DIR 지정된 것은 단위를 포함하는 것입니다
U 디렉토리.

-M 생산을 허용 confmagic.h 일부 웰을 자동으로 다시 매핑하는 파일
다음과 같은 다른 대안으로 알려진 기호 b카피() 재매핑 중
투명하게 memcpy () 사용할 수 없을 때. 이 옵션이 켜져 있습니다.
때 자동으로 confmagic.h 파일이 최상위 디렉터리에 존재합니다.
이 옵션을 영구적으로 비활성화하려면 해당 파일을 제거하기만 하면 됩니다.

-V 버전 번호를 인쇄하고 종료합니다.

이용 가이드


이 (긴) 섹션은 다음에 대한 소개입니다. 메타 구성, 여기서 우리는 모든 것을 배울 것입니다
기초. 사용법을 이미 알고 계시다면 메타 구성, 다음으로 안전하게 건너뛸 수 있습니다
안내

살펴보기
일반적으로 특정 플랫폼에서 컴파일할 소스 패키지를 얻으려면
기본 Makefile을 편집하려면(있는 경우) C 컴파일러를 선택하고
적절한 라이브러리를 갖고 다음을 실행하십시오. 확인 명령. 패키지가 합리적이라면
잘 작성되면 컴파일됩니다(경고 옵션 없이 :-). 그 자체로 마지막
오늘날 사용 가능한 다양한 UNIX 플랫폼을 고려하면 문장은 실제 성능입니다.
그리고 맛의 다양성은 패키지 작성자가 깊이 관여했다는 것을 의미합니다.
표준적인 시도, 추측 및 조작을 통해 올바른 선택을 찾는 데 어려움을 겪습니다.
시스템 포함 및 유형이 포함되어 있습니다.

그러나 그의 모든 재능에도 불구하고 저자는 어떤 시스템에 다음과 같은 기능이 있다는 것을 알 수 없습니다.
시스템 호출이 깨졌거나 일부 시스템 구조에 표준 필드가 하나도 부족하거나
단순히 주어진 포함 파일이 존재하는지 여부. 그리고 나는 암시적인 것을 고려하지 않습니다
에 의해 반환된 유형과 같은 가정 malloc () 기능이나 존재
이름 바꾸기 () 몇 가지 예를 들면 시스템 호출입니다. 그러나 실제적인 목표를 달성하려면 그러한 지식이 필요합니다.
휴대 성.

이제 우리 자신을 학대하지 맙시다. 해당 정보를 사용하려면 더 큰 기술이 필요하지만
시스템 독립적인 방식으로 작성되므로 더 많은 이식 가능한 프로그램이 가능합니다.
특정 시스템에 대한 일부 가정이 참이거나 거짓이라는 사실에만 의존합니다.
각 가정은 서로 관련이 없습니다. 즉, 우리는 다음과 같이 말하지 않습니다.
BSD 시스템이거나 USG 시스템에 있습니다. 아무튼 요즘은 너무 모호해요. 아니, 우리는 원해요
소스 코드에 말해보세요: 이 시스템에는 이름 바꾸기 () 시스템 호출과 malloc ()
를 반환 (무효의 *) 값.

Metaconfig는 이러한 작업을 수행할 수 있는 도구입니다.
모든 것이 잘 진행된다면 Makefile을 직접 편집해야 합니다. 실행하여 메타 구성, 당신은
명명된 쉘 스크립트 구성. 구성 스크립트에 많은 노력을 기울였습니다.
현재 사용 가능한 기존 쉘의 99%에서 실행되도록 보장하는 내부
글쓰기. 구성은 대상 시스템을 조사하여 의심스러운 경우 질문하고
하나의 단일 쉘 파일에 모든 답변을 모아 다음 작업에 사용할 수 있습니다.
구성된 Makefile 및 C 포함 파일을 자동으로 생성합니다.

쉘 스크립트에 사용할 수 있는 기호 세트는 제한적이지만 매우 큽니다.
그리고 C 프로그램. 그것들은 모두 용어집 파일에 문서화되어 있습니다. 당신이해야 할 일은 배우는 것뿐입니다.
이에 대해 알아보고 이를 사용하여 이식성 및 구성 문제를 해결하십시오. 그 다음에,
실행하여 메타 구성, 패키지에 적합한 구성 스크립트가 생성됩니다.

구성 스크립트는 여러 단위(300개 이상)로 구성되어 있으며 각 단위는 다음과 같습니다.
소수의 쉘 및/또는 C 기호를 정의하는 일을 담당합니다. 유닛이 조립됩니다.
마지막 단계에서 함께 종속성 그래프를 존중합니다(하나의 단위에는 결과가 필요할 수 있음).
스크립트 이전에 배치되는 여러 다른 유닛의 경우)

기호
기호는 가장 중요한 것입니다. 메타 구성 세계. 그들은 가장 작습니다
일반적으로 단어로 인식되는 엔터티이며 구성이 끝날 때 값을 부여받을 수 있습니다.
실행. 예를 들어 C 전처리기 기호는 HAS_RENAME 하는 메타 구성 그 상징
다음과 같은 경우에만 정의되는 것이 보장됩니다. 이름 바꾸기 () 시스템 호출이 존재합니다. 비슷하게,
전에, $ranlib 쉘 변수는 ':' 또는 'ranlib'로 설정됩니다.
에 전화 란립 라이브러리 파일을 주문하려면 프로그램이 필요합니다. 이것이 어떻게 작동하는지는 아닙니다.
지금으로서는 중요한 것은 이러한 기호에 생활
(즉, 값) 구성 실행.

기호를 사용하는 것은 비교적 간단합니다. C 소스 파일에서는 간단히 기호를 사용하면 됩니다.
전처리기 지시어로 값(예: #ifdef HAS_RENAME) 또는 기호가 있는 경우
value는 C에서 매크로를 사용하는 것과 마찬가지로 문자열입니다. 그리고 쉘 파일이나
Makefile에서는 쉘 기호를 직접 참조할 수 있습니다.

사실, 거짓말을 하고 있습니다. 이전 단락만큼 완전히 마술적이지는 않기 때문입니다.
소리가 날 수 있었습니다. C 파일에는 구성 생성을 포함해야 합니다. 구성.h 파일, 그리고
쉘 스크립트나 Makefile을 .SH 파일로 래핑해야 하며 쉘을 참조할 수 있습니다.
해당 .SH 파일의 변수 대체 부분에만 기호가 있습니다. 이에 대해서는 나중에 자세히 설명합니다.

출처 파일
기호는 제한된 소스 파일 세트에만 나타날 수 있습니다. 메타 구성 ~ 만
알려진 기호를 찾을 때 이를 스캔하여 필요한 단위를 알아내십시오.
C 소스 파일, 즉 .c, .h, .y or .l 확장 및
쉘 기호는 .SH 파일에서만 검색됩니다.

기호의 값을 얻으려면 C 파일에 특수 문자가 포함되어야 합니다. 구성.h
에 의해 생성되는 파일 구성 C 기호가 있을 때. 그리고 .SH 파일이 실행됩니다.
쉘을 통해 새 파일을 생성합니다. 그러나 .SH 파일의 상단 섹션에는
특별한 config.sh 파일(또한 다음을 실행하여 생성됨) 구성)는 소스이며 가변적입니다.
대체가 적용됩니다. 실제로, 구성.h 을 실행하여 생산됩니다. 메타 구성생산
구성_h.SH 파일에서 다시 변수 대체를 사용합니다. 그래서 우리는 그것을 살펴볼 것입니다
이것이 전체의 핵심이기 때문에 조금 더 자세히 구성 계획...

변하기 쉬운 치환
라는 쉘 구조가 있습니다. 여기에서 지금 확인해 보세요. 문서 명령이 입력을 받을 수 있게 해주는 것
스크립트 자체 내에서 지정됩니다. 해당 입력은 쉘에 의해 이중으로 해석됩니다.
here 문서의 형식에 따라 따옴표로 묶인 문자열 또는 작은 따옴표로 묶인 문자열
사양.

here 문서를 지정하려면 '<<' 토큰과 그 뒤에 단일 식별자가 사용됩니다. 에서
그런 다음 나머지 스크립트 줄은 여기까지 명령에 대한 입력을 형성합니다.
문서가 한 줄에 단독으로 발견되었습니다. 쉘 대체(쉘 변수 포함)
대체)는 식별자가 작은따옴표로 묶이지 않는 한 수행됩니다. 예를 들어:

var='첫번째'
tar = '두 번째'
echo "--> 먼저 여기 문서:"
고양이 <
var='$var'
타르='$tar'
EOM
echo "--> 두 번째 문서:"
고양이 <<'엄'
에코 $var
에코 $tar
EOM
에코 "--> 끝."

쉘을 통해 실행될 때 다음이 생성됩니다.

--> 첫 번째 문서는 다음과 같습니다.
var='첫번째'
tar = '두 번째'
--> 두 번째 문서:
에코 $var
에코 $tar
--> 끝.

첫 번째 여기 문서의 내용은 해석된 반면 두 번째 문서는 있는 그대로 출력됩니다.
우리가 곧 보게 될 것처럼 둘 다 .SH 스크립트에서 유용합니다.

사용 .쉿 스크립트
.SH 스크립트는 일반적으로 다음을 실행하여 생성됩니다. MakeSH 기존 파일과 다른 스크립트,
변화 파일파일.SH. 한 가지 예를 들어보겠습니다. 여기에 작은 스크립트가 있습니다.
(전화하자 intsize) 단일 메시지를 인쇄합니다. INT C의 데이터 유형
불행히도 여기에는 다음과 같은 값이 내장되어 있습니다.

#!/ 빈 / SH
intsize='4'
echo "이 컴퓨터에서는 int 유형이 $intsize 바이트입니다."

뛰자 makeSH 그것에 '를 입력하여makeSH intsize'. 우리는 싱글을 얻습니다 intsize.SH 파일
다음과 같이 보입니다.

$CONFIG의 경우
'')
테스트 -f config.sh인 경우; 그럼 TOP=.;
elif 테스트 -f ../config.sh; 그러면 TOP=..;
elif 테스트 -f ../../config.sh; 그럼 TOP=../ ..;
elif 테스트 -f ../../../config.sh; 그럼 TOP=../../..;
elif 테스트 -f ../../../../config.sh; 그럼 TOP=../../../..;
그렇지 않으면
echo "config.sh를 찾을 수 없습니다."; 1번 출구
fi
. $TOP/config.sh
;;
그 C
: SH 파일이 SH 파일과 동일한 디렉터리에 대상을 생성하도록 강제합니다.
: 이는 make가 항상 SH 파생 상품을 찾을 수 있는 위치를 알 수 있도록 하기 위한 것입니다.
케이스 "$0"
*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
그 C
echo "intsize 추출 중(변수 대체 포함)"
: 파일의 이 섹션에는 변수 대체가 수행됩니다.
: 구성 하위가 필요한 항목을 !NO!SUBS에서 이동하세요! 섹션을 !GROK!THIS!로 변경하세요.
: 해석을 원하지 않는 달러 기호와 백틱을 보호하세요.
: 앞에 백슬래시를 넣습니다. 이 댓글은 삭제할 수 있습니다.
$spitshell >intsize <
$startsh
!그로크!이것!

: 다음 달러와 백틱에는 추가 백슬래시가 필요하지 않습니다.
$spitshell >>intsize <<'!NO!SUBS!'
intsize='4'
echo "이 컴퓨터에서는 int 유형이 $intsize 바이트입니다."
!안돼!서브스!
chmod 755 int 크기
$eunicefix intsize

이 스크립트의 첫 번째 부분( 케이스 진술)이 해당 항목을 찾으려고 합니다. config.sh
파일을 소스로 사용하기 위해. 그만큼 $CONFIG 변수는 기본적으로 false이고, 다음 경우에는 true입니다.
config.sh 이미 소스가 제공되었습니다(이 파일이 다음에서 실행된 경우가 해당됩니다).
이내 구성 하지만 여기서 문제를 혼동하지 마세요).

한 번 config.sh 파일은 소스였으며 모든 쉘 기호는 다음에 의해 정의되었습니다. 구성 are
세트. 우리는 현재 디렉터리를 변경하는 데 사용되는 두 번째 사례 설명에 도달한다는 것을 알고 있습니다.
경로는 이 프로그램에 도달하는 데 사용됩니다(예를 들어 'sh ../scripts/intsize.SH', 우리
먼저 실행하겠습니다 'cd ../스크립트' 계속하기 전에). 이것을 이해하지 못한다면 하지 마세요.
그것에 대해 걱정하십시오.

여기에 흥미로운 내용이 있습니다. 이 스크립트는 $spitshell 가변적이며 그렇지 않습니다.
우리가 알고 있는 것...아직은요. 용어집 파일을 살펴보면,
이것은 알려진 변수입니다. 메타 구성. 이 파일을 배포의 일부로 만드는 경우
(MANIFEST.new 파일에 포함시켜서 나중에 다시 설명하겠습니다) 실행합니다.
메타 구성, 그 다음에 구성 스크립트는 이 변수에 적합한 값을 결정합니다.
그리고 그것은에 설정됩니다 config.sh. 같은 경우 $startsh 그리고 신비한 $eunicefix at
끝. 합리적인 시스템에서 관련 부분은 config.sh 다음과 같이 보일 것입니다.

spitshell='고양이'
startsh='#!/ 빈 / SH'
유니스픽스=':'

아! 우리는 거기에 도착하고 있습니다. 이제는 익숙해 보입니다. 우리는 싱글을 직면하고 있습니다 방법 누구의 명령을
입력은 변수로 삽입된 여기 문서에서 나오며 출력은 다음으로 리디렉션됩니다.
intsize. 그 가치는 다음과 같을 것이다. $startsh, 즉 '#!/ 빈 / SH'. 지금까지는 괜찮습니다.

그런 다음 스크립트의 나머지 부분을 가져오기 위해 여기에서 두 번째 문서 확장에 도달합니다. 이것
시간이 지나면 여기 문서 기호는 작은따옴표로 둘러싸여 있으므로 내용은 다음과 같습니다.
에 문자 그대로 첨부했습니다. intsize 파일. 그래서 '를 실행하여sh intsize.SH', 우리는
다음 출력:

intsize 추출(변수 대체 사용)

생성된 intsize 파일을 살펴보면 다음을 볼 수 있습니다.

#!/ 빈 / SH
intsize='4'
echo "이 컴퓨터에서는 int 유형이 $intsize 바이트입니다."

이것이 바로 우리가 처음에 가졌던 것입니다. 지금까지는 무작동 절차인데...
그러나 얼마나 놀라운 일인가! 그런 일이 일어났습니다(순전한 우연의 일치입니다. 저를 믿으세요!). 메타 구성 알고있다
에 대한 $intsize 쉘 기호. intsize의 초기화를 변수로 이동하여
.SH 스크립트의 보간된 영역을 사용하여 초기화합니다. 구성-계산된 값,
이제 추가된 쓸모없는 댓글을 제거합니다. makeSH, 우리는 다음을 얻습니다.

$CONFIG의 경우
'')
테스트 -f config.sh인 경우; 그럼 TOP=.;
elif 테스트 -f ../config.sh; 그러면 TOP=..;
elif 테스트 -f ../../config.sh; 그럼 TOP=../ ..;
elif 테스트 -f ../../../config.sh; 그럼 TOP=../../..;
elif 테스트 -f ../../../../config.sh; 그럼 TOP=../../../..;
그렇지 않으면
echo "config.sh를 찾을 수 없습니다."; 1번 출구
fi
. $TOP/config.sh
;;
그 C
케이스 "$0"
*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
그 C
echo "intsize 추출 중(변수 대체 포함)"
$spitshell >intsize <
$startsh
intsize='$intsize'
!그로크!이것!

$spitshell >>intsize <<'!NO!SUBS!'
echo "이 컴퓨터에서는 int 유형이 $intsize 바이트입니다."
!안돼!서브스!
chmod 755 int 크기
$eunicefix intsize

물론, 쉘을 통해 이 스크립트를 실행하면 동일한 스크립트가 다시 출력됩니다. 하지만 만약
우리는 달린다 구성 기계에서 INT 64비트 수량으로 저장되며, config.sh 의지
세트 intsize 8 및 intsize 스크립트는 올바른 값을 갖고 다음을 인쇄합니다.

이 머신에서 int 유형은 8바이트입니다.

맞습니다. 축하해요! 방금 쉘 스크립트를 구성했습니다 !!

생산 구성.h
이제 우리는 그 길을 살펴볼 수 있습니다 구성.h 에서 생산됩니다 구성_h.SH. 우리는 알고
달리는 구성 생산 config.sh 스크립트(정확히 수행되는 방법은 엄격히
여기에 관련이 있지만 궁금하신 분들을 위해 여기에 또 다른 문서 대체가 있습니다.
구성 그 자체). 그만큼 구성_h.SH 그 자체는 다음에 의해 만들어졌습니다. 메타 구성 동시에
구성 소스 내에서 하나 이상의 C 기호를 사용하는 경우입니다.

무작위로 살펴 보겠습니다. 구성_h.SH 실제로 무슨 일이 일어나는지 보려면 다음 파일을 사용하세요.

$CONFIG의 경우
'')
테스트 -f config.sh인 경우; 그럼 TOP=.;
elif 테스트 -f ../config.sh; 그러면 TOP=..;
elif 테스트 -f ../../config.sh; 그럼 TOP=../ ..;
elif 테스트 -f ../../../config.sh; 그럼 TOP=../../..;
elif 테스트 -f ../../../../config.sh; 그럼 TOP=../../../..;
그렇지 않으면
echo "config.sh를 찾을 수 없습니다."; 1번 출구
fi
. $TOP/config.sh
;;
그 C
케이스 "$0"
*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
그 C
echo "config.h 추출 중(변수 대체 포함)"
sed < config.h -e 's!^#undef!/define!' -e 's!^#un-def!#undef!'
/*
* 이 파일은 config_h.SH 스크립트를 실행하여 생성되었으며,
* 일반적으로 생성되는 config.sh에서 값을 가져옵니다.
* 구성을 실행 중입니다.
*
* 필요에 따라 자유롭게 수정하시기 바랍니다. 그러나 참고하세요.
* config.h.SH를 다시 ​​실행하면 변경 사항이 모두 지워집니다.
* 보다 영구적인 변경을 위해서는 config.sh를 편집하고 config.h.SH를 다시 ​​실행하세요.
*/

/* 구성 시간: $cf_time
* 구성자: $cf_by
* 대상 시스템: $myuname
*/

#ifndef _config_h_
#define_config_h_

/* 복사:
* bcopy() 루틴이 그렇지 않은 경우 이 기호는 memcpy에 매핑됩니다.
* 문자열 복사가 가능합니다.
*/
/* HAS_BCOPY:
* 이 기호는 bcopy() 루틴을 사용할 수 있는 경우 정의됩니다.
* 메모리 블록을 복사합니다. 아래에 이 기호를 사용하면 안 됩니다.
* 일반적인 상황에서는 대신 bcopy()를 직접 사용하세요.
* bcopy를 사용할 수 없는 경우 memcpy()에 매핑됩니다.
*/
#$d_bcopy HAS_BCOPY /**/
#ifndef HAS_BCOPY
#ifdef bcopy
#un-def bcopy
#endif
#define bcopy(s,d,l) memcpy((d),(s),(l)) /* memcpy에 매핑됨 */
#endif

/* HAS_DUP2:
* 이 기호가 정의된 경우 dup2 루틴이 다음과 같음을 나타냅니다.
* 파일 설명자를 복제하는 데 사용할 수 있습니다.
*/
#$d_dup2 HAS_DUP2 /**/

/* I_STRING:
* 정의된 경우 이 기호는 C 프로그램에 다음을 수행해야 함을 나타냅니다.
* 포함하다 (USG 시스템) 대신 (BSD 시스템).
*/
#$i_string I_STRING /**/

#endif
!그로크!이것!

파일 상단에서 이미 가지고 있는 표준 .SH 구성을 인식합니다.
자세히 공부했습니다. 다음은 여기 문서를 통해 파일 자체를 추출하는 것입니다.
변수 대체. 그러나 여기서는 일반 문자를 사용하지 않습니다. 방법 그러나 SED 대신, 이후
즉석에서 추가 편집을 수행해야 합니다. 이유는 나중에 알아보겠습니다. 잊어버리세요.
지금 당장 그것에 대해.

이제 첫 번째 주석에 도달했으며 파일에 구성 시간 태그가 지정되었습니다.
대상 시스템 등... (소스에서 오는 변수 config.sh 파일이되었습니다
에 의해 설정 구성). 해당 주석 헤더 뒤에는 보호를 위한 '#ifndef' 보호가 옵니다.
이 파일이 여러 개 포함되는 것을 방지합니다. 그런 다음 파일의 핵심이 나옵니다.

그것을 아는 것이 도움이 된다 $d_*$i_* 변수는 '밝히다'또는'언데프' 에 의해
구성, 기능이나 포함 파일이 시스템에 존재하는지 또는
아니다. 이는 다음을 의미합니다.

#$d_bcopy HAS_BCOPY /**/

줄은 다음 중 하나로 확장됩니다.

#define HAS_BCOPY /**/

$d_bcopy 변수가 'define'으로 설정된 경우 또는:

#undef HAS_BCOPY /**/

$d_bcopy가 'undef'로 설정된 경우 해당 기능이 없기 때문입니다. 그러나 그렇지 않습니다.
에 무엇이 쓰여지나요? 구성.h 파일 때문에 SED 우리가 이미 본 필터,
두 번째 형식은 다음과 같이 변환됩니다.

/*#define HAS_BCOPY /**/

나중에 편집할 때 편리한 양식입니다. 구성.h 제거만 하면 되기 때문에
재정의하려면 앞에 '/*'를 입력하세요. 구성님의 선택입니다. 마찬가지로 단일을 추가할 수도 있습니다.
특정 기호의 정의를 피하기 위해 '#define' 줄 시작 부분에 '/*'를 붙입니다.
이것이 각 기호 정의가 후행 '/**/'로 보호되어 선행 기호를 닫는 이유입니다.
'/*'로 열린 주석입니다(주석은 C에 중첩되지 않습니다).

이제 '#undef'를 '/*#define'으로 변환하는 것이 좋지만 실제로
'#undef', 우리는 꼼짝 못하게 됩니다... '#un-def'로 작성하고 그대로 두지 않으면 SED 이를 '#undef'로 수정하세요.
생산하는 동안 구성.h, 이것이 실제로 여기서 수행되는 작업입니다.

동일한 종류의 추론이 해당 두 줄에 적용됩니다.

#$d_dup2 HAS_DUP2 /**/
#$i_string I_STRING /**/

그리고 가정 config.sh 정의:

d_dup2='정의'
i_string='undef'

우리는 생산에 들어갈 것이다 구성.h:

#HAS_DUP2 정의 /**/
/*#define I_STRING /**/

흐르는 물처럼 맑아요? 좋은!

이제 다음을 포함하면 다음이 분명해집니다. 구성.h 모든 C 소스 파일에서
무엇을 알고 구성 귀하의 시스템에서 추측했습니다. 실제로 해당 기호를 사용하면
구성된 C 코드 작성, 이후 메타 구성 당신에게 그 기호가 필요하다는 것을 알게 될 것입니다.
적합한 생성 구성_h.SH 파일과 필요한 모든 코드를 구성
(관련 쉘 변수에 값을 할당하여) 적절한 값을 계산합니다.

달리는 메타 구성
에 집중하자 메타 구성 프로그램이 단위를 어떻게 사용하는지 이해하기 위해 잠시 동안
필요한 모든 구성 파일을 생성하려면 소스 코드를 사용하세요. 새로 쓰실 생각이라면
단위를 사용하려면 전체 계획을 잘 이해해야 합니다.

MANIFEST.new 파일이 없는 경우, 메타 구성 대신 MANIFEST 파일을 사용하려고 시도합니다.
편의상. MANIFEST.new를 언급하는 모든 곳에서는 MANIFEST로 이해될 수 있습니다.
패키지 루트에 MANIFEST.new 파일이 없는 경우.

MANIFEST.new 파일이 올바르게 설정되어 있고 원하는 모든 소스 파일이 나열되어 있다고 가정합니다.
구성하고 실행했습니다. 패킷 루트 소스 디렉터리에
패키지 파일, 당신은 실행할 수 있습니다 메타 구성 그러면 다음을 얻게 됩니다:

$ 메타 구성
장치를 찾는 중...
312개 단위에서 종속성 목록을 추출하는 중...
MANIFEST.new에서 파일 이름(*.[chyl] 및 *.SH) 추출 중...
원하는 파일을 만드는 중...
.[chyl] 파일에서 기호를 검색하는 중...
.SH 파일에서 기호를 검색하는 중...
최적의 종속성 그래프를 계산하는 중...
비공개 make 파일을 만드는 중...
로드 가능한 단위 결정 중...
make 파일을 업데이트하는 중...
단위의 올바른 순서를 결정하는 중...
구성 생성 중...
만들기

첫 번째 단계에서는 공용 디렉터리에서 모든 단위 파일(.U로 끝남)을 찾습니다.
먼저, 그 다음에는 개인용으로. 비공개 U 디렉터리에 공개 파일을 복사하는 경우
(즉, 패키지의 최상위 수준에 있는 U라는 디렉터리) 공개 디렉터리를 재정의합니다.
버전. 사용 가능한 모든 단위 목록이 있으면 이를 구문 분석하고 모든 단위를 추출합니다.
?MAKE: 라인은 종속성과 알려진 쉘 기호에 대해 알려줍니다. 또한
?H: 라인에 초점을 맞춰 C 기호와 어떤 쉘 기호가 있어야 하는지 알아봅니다.
해당 C 기호에 대한 적절한 값을 얻기 위해 계산됩니다(그래서 우리는 또 다른 수준의 종속성을 갖습니다).
이리).

다음으로 MANIFEST.new 파일에서 적절한 파일 이름이 추출되고 구함 파일은
build: 해당 파일에는 해당 패키지에 필요한 모든 C 기호와 셸 기호가 나열되어 있습니다. 우리
먼저 C 기호에 대한 C 유형 파일을 검색한 다음 해당 파일에 종속성을 전파합니다.
관련 쉘 기호(?H: 행에서 수집). 다음 .SH 파일이 스캔되고 마지막으로
모든 쉘 기호가 알려져 있습니다.

임시 Makefile이 빌드되고 Metaconfig가 다음을 시도합니다. 확인 볼 수 있는 모든 쉘 기호
어떤 명령(두 번째 ?MAKE: 줄에 나열됨)이 실행되고, 따라서 어떤 장치가 실행됩니까?
정말 필요해요. 달리 필요하지 않은 선택적 단위는 제거되고 두 번째 Makefile은
생성되었습니다. 이번에는 모든 단위와 해당 주문에 대해 알아보겠습니다.
제거된 단위와 해당 쉘 기호에 대한 기본값이 계산되었습니다. 그만큼
구성 그런 다음 스크립트를 생성할 수 있습니다. 구성_h.SH. 이제 끝났습니다.

협약
전체 프로세스를 건전하게 만들려면 적절한 규칙을 따라야 합니다. 경우가 있습니다
단위 규칙 및 변수 명명 규칙.

모든 단위는 특별한 단위가 아닌 한 첫 글자를 소문자로 사용해야 합니다. 에 의해
특별하다는 것은 그들이 실제로 사용할 수 있는 새로운 쉘 변수를 정의하지 않는다는 것을 의미합니다.
자신의 .SH 파일에 있는 사용자가 아니라 스크립트나 쉘 변수를 생성하는 단위입니다.
내부적으로 사용됩니다. 구성 스크립트. 전형적인 예는 다음과 같습니다 이니트유 파일은
주요 변수 초기화, 또는 마이리드.유 이는 내 책 거의 사용되는 스크립트
어디에나 구성 사용자에게 질문을 할 때.

비특수 단위는 두 개의 개별 그룹으로 세분화됩니다. 즉, 변수를 정의하는 단위입니다.
자체 쉘 변수를 정의하는 C 기호 및 단위와 연관되어 있습니다. 첫 번째 그룹
포함 파일과 관련된 변수로 더 나뉩니다(이름은 i_) and
다른 정의와 관련된 변수(이름은 d_). 두 번째 그룹은
예를 들어, 그 자체를 나타내는 이름 cc.U 정의 $cc 값이 다음과 같은 쉘 변수
사용할 C 컴파일러.

특수 유닛은 때때로 미리 정의된 변수를 예약하고 "결과"를 반환합니다.
다른 잘 알려진 변수에서. 예를 들어, 내 책 Myread.U에서 제작한 스크립트
프롬프트를 기대합니다 $rp, 기본 답변은 $dflt 사용자 답변을 $ans.
이는 이 매뉴얼 페이지에 문서화되어 있지 않습니다. 직접 가서 장치 자체를 살펴보아야 합니다.
어떤 변수가 사용되는지, 단위가 어떻게 사용되는지 이해합니다.

사용 XNUMXD덴탈의 용어사전
용어집 파일은 다음에 의해 자동으로 생성됩니다. 메이크글로스 추출하는 스크립트
?S:, ?C: 및 ?MAKE: 행의 정보를 알파벳순으로 다시 포맷합니다.
정렬된 용어집. 자신이 속한 기호에 대해 알기 위해 용어집을 읽는 것이 중요합니다.
사용이 허용됩니다. 그러나 용어집에서는 사용 방법을 알려주지 않습니다. 보통은 그렇죠
당신에게 달렸습니다.

언젠가 당신은 아마도 자신만의 단위를 작성하게 될 것이고, 다음에 대해 충분히 알게 될 것입니다. 메타 구성
신속하고 효율적으로 수행할 수 있습니다. 그러나 작업 내용을 적절하게 문서화하는 것을 잊지 마십시오.
?S: 및 ?C: 줄을 사용하지 않으면 다른 사람이 이를 재사용할 수 없습니다. 에 대해 기억하세요
처음에는 용어집과 이 매뉴얼 페이지만 있으면 시작할 수 있었습니다.

결론
이제 당신은 메타 구성 기본 사항을 읽어야 합니다. 기술 섹션, 다음
건너뛰기 명시 허용되는 모든 세부 사항에 대해 알아보는 섹션
단위 제어 라인('?'로 시작하는 라인) 또는 별도의 MAKE 명령에 대한 구문
당신은 사용할 수 있습니다.

명시


이 섹션에서는 내부 내용을 문서화합니다. 메타 구성, 기본적으로 단위 구문, 특수
알아야 할 단위와 힌트 파일.

일반 단위 통사론
메타 구성 단위는 두 개의 개별 부분으로 나뉩니다. 헤더 섹션(시작하는 줄
'?' 포함) 및 쉘 섹션( 구성 스크립트). 그것은
유닛 내의 어느 곳에나 '?X:' 주석을 추가할 수 있지만 다른 '?' 라인(또한
라는 제어 라인) 엄격한 주문 정책을 가지고 있습니다.

제어선이 너무 길면 최종을 탈출하여 연속을 사용할 수 있습니다.
백슬래시를 사용하여 다음 줄로 계속되는 새 줄(그 다음 들여쓰기해야 함)
공백이나 탭으로).

다음은 각 제어 라인에 대한 공식적인 설명입니다. 명시되지 않는 한
그렇지 않은 경우 이 프레젠테이션의 순서는 단원 내에서 사용되는 순서입니다.

?RCS: 비어 있는 본문
유닛 상단의 RCS 댓글에 사용됩니다.

?엑스: 어떤 본문
범용 주석. 단위의 어느 위치에나 나타날 수 있지만 왼쪽 정렬이 필요합니다.
RCS 의견의 경우 ?RCS: 의견 양식을 사용하세요.

?만들다:상징 명부: 의존 명부 [+선택사항]
이것이 첫 번째 종속성 라인입니다. 첫번째 상징 명부 모든 기호를 나열해야 합니다.
이 장치에 의해 생성됩니다(즉, 그 값은 장치의 쉘 섹션에 의해 계산됩니다).
기호는 공백으로 구분되어야 합니다. 정의된 기호가 내부 용도로만 사용되는 경우
생성된 항목에 표시되어서는 안 됩니다. config.sh 파일 앞에는 다음이 와야 합니다.
'+'(이후에 정의되는 선택적 종속성과 혼동하지 마세요). 두번째
목록의 일부(가운데 ':' 뒤)는 단위 종속성입니다. 모두 나열되어야합니다
필요한 특수 단위와 쉘에서 사용되는 모든 기호
구현. 기호가 추가되었지만 해당 구성 값이 중요하지 않은 경우
앞에 '+'가 올 수 있으며, 이 경우 조건부 종속성이라고 합니다.
해당 장치는 해당 기호가 실제로 그렇지 않은 경우에만 로드됩니다.
원함; 그렇지 않으면 기본값이 사용됩니다.

?만들다: 명령
초기 종속성 줄 뒤에 하나 이상의 명령줄이 있을 수 있습니다. 저것들
장치가 명령을 로드하려고 할 때 명령이 실행됩니다. 구성. 참조
자세한 내용은 make 명령에 대한 단락을 참조하세요. 참고로 선두
앞에 문자가 필요합니다. 명령.

?와이:레이아웃
이 유닛에 대한 레이아웃 지시어를 선언하세요. 해당 지시어는 문자열 중 하나일 수 있습니다.
상단, 디폴트 값 or 바닥 (대소문자는 중요하지 않습니다. 철자로 표기하는 것이 좋습니다.
대문자). 생략하는 경우, 디폴트 값 가정합니다.

이 지시문은 장치를 상단이나 하단에 강제로 적용하려는 경우에만 필요합니다.
생성된 구성 단위 종속성이 허용하는 대로 스크립트입니다. 중요한
따라서 처음에는 질문이 강요될 수 있습니다. 동일한 레이아웃 클래스 내에서 단위
d_* 및 i_* 단위에 대한 두 가지 특별한 경우를 사용하여 알파벳순으로 정렬됩니다.
각각 해당 클래스의 최상위 및 최하위에 위치합니다(그러나 이들은 해당 클래스에 속해야 합니다).
기본 클래스).

다른 모든 장치가 종속성을 요구하는 장치를 맨 위에 강제로 설치하는 경우
그 전에는 흥미로운 결과를 얻을 수 없습니다. 따라서 해당 지시문은 실제로
다수에 의존하지 않는 일부 대화형 단위의 우선순위를 높이는 데 사용됩니다.
경로 관련 질문과 같이 사용자에게 표시되는 기타 기호입니다.

?에스:기호_이름 [(시대에 뒤 떨어진 상징 명부)]:
쉘 기호를 소개합니다. 이 첫 번째 줄은 기호의 이름을 지정하고 선택적으로 뒤에 기호가 붙습니다.
괄호 안에 목록을 넣고 더 이상 사용되지 않는 해당 항목을 제공합니다. 쓸모없는 것들
기호는 새 기호로 다시 매핑됩니다. 기호_이름 경우 -o 옵션이 주어진다
메타 구성.

?에스:어떤 본문, for 용어사전
기본적으로 셸 기호를 설명하는 주석으로 추출됩니다. 메이크글로스
용어집 파일에.

?에스:. 쉘 기호 설명을 닫습니다.

?씨:기호_이름 [~ 별명] [(시대에 뒤 떨어진 상징 명부)]:
새로운 C 기호를 도입합니다. 그만큼 별명 name은 C 기호의 이름입니다.
통제될 수 있습니다. 즉, 별명 기호를 원하면 해당 C 기호가 작성됩니다.
FBI 증오 범죄 보고서 구성_h.SH 파일. 일반적으로 별칭은 '%<'(장치 이름을 나타냄)입니다.
그리고 C 기호를 ?W: 라인에 매핑하는 라인도 있습니다. 별명. 관련 부분도
?H: 행은 '?%<' 조건으로 명시적으로 보호됩니다. 기호 보기
자세한 내용은 앨리어싱 단락을 참조하세요. 나머지 줄은 선택 사항입니다.
시대에 뒤 떨어진 상징 명부, 새 항목에 대한 기존 항목을 나열합니다. 기호_이름.

?씨:어떤 본문, for 용어사전 구성_h.SH
기본적으로 C 기호를 설명하는 주석으로 추출됩니다. 메이크글로스
용어집 파일에 메타 구성구성_h.SH 기호가 다음과 같은 경우 파일
원함(또는 기호 앨리어싱을 사용할 때 해당 앨리어스가 필요한 경우).

?씨:. C 기호 설명을 닫습니다.

?시간:?상징:구성_h.SH 물건
다음 항목에 대한 일반적인 포함 요청입니다. 구성_h.SH. 이 줄은 다음과 같은 경우에만 작성됩니다.
경비 상징 정말로 원합니다. 이 일반적인 형식은 C 기호에 필요합니다.
앨리어싱이 사용되었습니다. 그렇지 않고 다른 "표준" 양식 중 하나를 사용하는 경우
보호는 자동으로 수행됩니다. 메타 구성 자체.

?시간:#$d_var VAR "$var"
조건부로 정의 VAR C 기호로 $var '로 설정되면밝히다'. 다음을 의미합니다.
'?VAR:' 보호 상태, 그리고 메타 구성 자동으로 링크 VAR 두 개의 껍질에
변수 종속성(예: 둘 다 $d_var$var 다음과 같이 표시됩니다. if VAR is
C 소스에서 사용됨)

?H:#정의 VAR [선택 본문]
항상 정의 VAR C 기호를 어떤 값으로 변환합니다. '?VAR:' 보호 상태입니다.
장치 자체에 자동 셸 종속성이 적용됩니다.

?H:#정의 변수(x,y,z) $var
항상 매크로를 정의합니다. VAR 의 가치가 되도록 $var 변하기 쉬운. 그것은 에 달려있다
보장하는 단위 $var 합리적인 가치를 지니고 있습니다. C 간의 자동 종속성
매크로 VAR 쉘 변수가 설정되고 전체 라인이 보호됩니다.
암묵적으로 '?VAR:'.

?시간:#$d_var VAR
조건부로 정의 VAR if $d_var '로 설정되어 있습니다.밝히다'. '?VAR:'경비
상태. 자동 쉘 종속성이 생성됩니다. $d_war.

?H:#정의 VAR "$var"
구성된 값을 할당합니다. VAR C 기호. '?VAR:' 보호 조건.
링크를 위해 자동 셸 종속성이 생성됩니다. VAR$var.

?시간:. 닫는다 구성_h.SH 포함 요청.

?중:C 상징: C 의존성
C 기호에 관한 마법 정의를 소개합니다. confmagic.h, 그리고
나머지 ?M: 정의에 대한 보호 기호입니다. 이 줄은 조용히 암시합니다.
'?W:%<:C 상징', 즉 C 기호가 나타나면 장치가 구성에 로드됩니다.
C 소스 내에서 마법이 사용되는지 여부. C 종속성이 활성화되었습니다.
마법을 사용할 때 정의를 강제하기 위해 구성_h.SH. 그러나,
마법은 지원 사용되었지만 C 기호가 필요한 C 없이 소스에 나타납니다.
종속성이 있는 경우 Wanted 파일이 빌드될 때마다 경고가 표시됩니다.
이식성 문제(또한 장치가 무조건적으로 로드되기 때문에)
C 기호가 사용될 때마다 다른 ?C: 행에 관계없이 구성하십시오.
단위).

?중:CPP 데프
관련 문제가 발생할 때마다 confmagic.h에 도입될 매직 cpp 매핑을 정의합니다.
기호가 사용됩니다. 암묵적으로 '?SYM'어디를 지키고 SYM 기호 이름입니다
선행 ?M: 행으로 정의됩니다.

?중:. 닫는다 confmagic.h 포함 요청.

?W:껍질 상징 명부:C 상징 명부
C 기호의 운명과 쉘 기호의 운명을 연결합니다.
나열된 기호가 필요하면 모든 쉘 기호가 원하는 것으로 표시됩니다. 다음에 유용함
일부 C가 존재할 때 단위('%<'로 설정된 쉘 기호 목록)를 강제로 포함합니다.
기호가 감지되었습니다. 측면에서 이점을 얻으려면 쉘 기호 목록을 비워 둘 수 있습니다.
내장 전처리기 내 C 기호 위치의 효과(기호는 한정된
소스에 있는 경우 해당 전처리기에 대해). 공백이 있는 패턴을 찾으려면
그 안에는 'struct'와 같이 간단한 따옴표 안에 C 기호를 인용해야 합니다.
시간대 '.

?V:읽기 전용 기호:읽기-쓰기 기호
이것은 메탈린트 힌트이며 일부 쉘을 내보내는 특수 유닛에서만 사용해야 합니다.
변수. 중간 ':' 앞의 변수는 읽기 전용으로 내보내집니다(변경
경고가 표시됩니다). 반면 다른 기호는 자유롭게 읽고 변경할 수 있습니다.

?NS:파일 만든
이 줄은 두 가지 용도로 사용됩니다. 메탈린트 힌트 및 자리 표시자
미래 제이메이크 사용하다. 세 종류의 파일을 나열해야 합니다. 임시 파일은 다음과 같습니다.
테스트를 위해 생성된 개인 UU는 나중에 UU 디렉토리에 생성됩니다.
정독, 공개는 패키지의 루트 디렉토리에 남겨둡니다. 일시적인
파일은 앞에 '!' 문자("아니요! 재사용되지 않습니다.
나중에!"), 개인 UU 파일 앞에 './'(의미: 사용하려면
./파일아니라 파일), 공개는 있는 그대로 이름을 지정해야 합니다.

?NS:껍질 임시
다른 메탈린트 힌트. 이 줄에는 임시로 사용되는 모든 쉘 변수가 나열됩니다.
이 장치의 쉘 섹션 내에서.

?디:상징='가치'
조건부 종속성으로 사용되는 기호의 초기화 값입니다. 그렇지 않은 경우 ?D: 라인은 다음과 같습니다.
발견되면 null 값이 대신 사용됩니다. 그만큼 메탈린트 프로그램은 다음과 같은 경우 경고합니다.
기호가 조건부 종속성으로 한 번 이상 사용되었으며 적절한 기호가 없습니다.
?D: 초기화. null에도 해당 줄을 추가하는 것이 좋습니다.
초기화는 기호의 선택적 특성을 강조하기 때문입니다.

?영형:어떤 메시지 당신 필요
이 지침은 이 장치가 전체적으로 더 이상 사용되지 않음을 나타냅니다. 어떤 것을 사용할 때마다
해당 기호가 만들어지면(또는 종속성을 통해 간접적으로 사용) 메시지가 출력됩니다.
화면 (stderr에서). 하나 이상의 줄을 넣을 수 있습니다. 이 경우 각 줄은
순서대로 인쇄됩니다.

?린트:메탈린트 힌트
을 참조 메탈린트 사용할 수 있는 고유한 힌트를 설명하는 매뉴얼 페이지
익숙한.

?INIT:초기화 암호
이 줄에 지정된 초기화 코드는
구성 단위가 필요한 경우 스크립트.

C 상징 앨리어싱
때로는 의지할 수 없는 경우도 있습니다 메타 구성에 대한 자신의 기본 선택 구성_h.SH
주석 및 C 기호 정의. 여기서 앨리어싱이 작용합니다. 오히려 그렇기 때문에
설명하기 까다로우므로 기본 메커니즘을 이해하기 위해 예를 연구하겠습니다.

d_const.U 유닛은 C 컴파일러가 const를
예어. 그렇지 않은 경우 해당 키워드를 null 문자열로 다시 매핑하여
프로그램 컴파일. 또한, 우리는 다음과 같은 경우 자동으로 테스트를 실행하려고 합니다. const를 워드
사용.

d_const.U 유닛의 관련 부분은 다음과 같습니다.

?MAKE:d_const: cat cc ccflags Setvar
?MAKE: -$@% 추가 선택
?S:d_const:
?S: 이 변수는 HASCONST 기호를 조건부로 정의합니다.
?S: 이 C 컴파일러가 C 프로그램에 대해 알고 있음을 나타냅니다.
?S: const 유형.
?에스:.
?C:HASCONST ~ %<:
?C: 정의된 경우 이 기호는 이 C 컴파일러가 다음 사항을 알고 있음을 나타냅니다.
?C: const 유형. 해당 기호를 실제로 테스트할 필요는 없습니다.
?C: 프로그램 내. "const" 키워드만 사용하면
?C: 필요한 테스트를 실행합니다.
?씨:.
?H:?%<:#$d_const HASCONST /**/
?H:?%<:#ifndef HASCONST
?H:?%<:#define const
?H:?%<:#endif
?시간:.
?W:%<:const
?LINT:d_const 설정
?LINT:알려진 const
: const 키워드를 확인하세요
에코 " "
echo 'C 컴파일러가 "const"에 대해 알고 있는지 확인하는 중...' >&4
/bin/고양이 >const.c <<'EOCP'
본관()
{
const char *foo;
}
EOCP
if $cc -c $ccflags const.c >/dev/null 2>&1 ; 그 다음에
val="$define"
echo "그렇습니다."
그렇지 않으면
val="$undef"
echo "아니요, 그렇지 않아요."
fi
d_const를 설정하다
평가 $setvar

먼저 기본적으로 다음과 같은 ?W: 행의 사용을 확인합니다. "이 장치는 다음과 같은 경우에 필요합니다.
const를 키워드는 C 파일에서 사용됩니다.". 조건부로 다시 매핑하려면 const를 널로
문자열 구성.h, 조건부 정의를 선택했습니다. HASCONST 를 통해 $d_const.

그러나 이는 문제를 야기한다. 왜냐하면 HASCONST 기호는 다음에서 사용되지 않습니다.
출처는 오직 const를 토큰은. 그리고 ?H: 라인 정의 HASCONST 암묵적으로
'?HASCONST'로 보호됩니다. 그러므로 명시적인 '?%<' 제약 조건을 추가해야 합니다.
메타 구성 해당 줄이 포함되어야 함 구성_h.SH '%<' 기호가 나타날 때마다
수배됨(%<는 유닛 이름을 나타냅니다. 여기서는 d_const).

거의 완벽합니다. 왜냐하면 ?W: 라인이 원할 것이기 때문입니다. d_const 때마다 const를 사용된 다음
?H: 행이 구성_h.SH 파일. 그러나 주요 댓글(?C:
라인)에 첨부 HASCONST 그 자체도 다음을 통해 보호됩니다. HASCONST, 즉 암시적인 의미가 있습니다.
'?HASCONST' 제약 조건. 따라서 다음이 필요합니다. 앨리어싱 전에, HASCONST 기호를 '%<'로 지정합니다.

유닛의 나머지 부분(쉘 부분)은 정말 간단합니다. 그것은 단순히
다음을 사용하여 샘플 C 프로그램을 컴파일하려고 합니다. const를 예어. 그럴 수 있다면 그럴 것이다.
밝히다 $d_const 를 통해 $세트바 기능(다음에 의해 정의됨) Setvar.U 단위). 단락을 참조하십시오
자세한 내용은 특수 유닛에 대해 알아보세요.

확인 명령
?MAKE: 명령줄에서 있는 그대로 실행되도록 쉘 명령을 작성할 수 있습니다.
특별한 -선택하다 에 의해 트랩된 명령 메타 구성 그리고 무엇을 해야 하는지 알아보기 위해 구문 분석했습니다.
완료. 앞에 '-'는 방지하기 위한 것입니다. 확인 명령이 반환될 때 실패로부터
XNUMX이 아닌 상태 - '를 사용하기 때문에 실제로는 필요하지 않습니다.확인 -n'를 해결하기 위해
종속성이 있지만 향후 버전에서 필수가 될 경우를 대비해 유지하는 것이 좋습니다.
구문 선택 명령은 다음과 같습니다

-선택하다 cmd를 $@ target_file

어디에 $@ 현재 대상(이름)을 나타내는 Makefiles 내의 표준 매크로입니다.
최종 .U 확장자가 제거된 유닛의 구성). 그만큼 cmd를 부분은
실제 메타 구성 실행할 명령과 target_file 는 또 다른 매개변수입니다.
해석은 에 달려있다. cmd를 그 자체. 또한 최종 .U 확장자가 제거되고
일반적으로 유닛 파일을 참조합니다. 단, './'로 시작하는 경우에는 유닛 파일을 참조합니다.
메타 구성 '의 제어 파일.산 디렉토리.

사용 가능한 명령은 다음과 같습니다.

추가 target_file구성.

추가.Config_sh
그 부분을 채워준다. 구성 생산 config.sh 파일. 만 사용됨
변수가 추가되고 조건부 변수(조건부 종속성에서 비롯됨)는
건너뛰었다.

add.Null 빈 문자열에 사용되는 모든 쉘 변수를 초기화하는 섹션을 추가합니다.

c_h_weed는 구성_h.SH 파일. 필요한 줄만 인쇄됩니다.

cm_h_weed는 confmagic.h 파일. 필요한 줄만 인쇄됩니다. 이것
명령은 다음과 같은 경우에만 활성화됩니다. -M 스위치가 주어지거나 confmagic.h 파일
이미 존재 함.

닫기.Config_sh
here 문서를 끝내기 위해 한 줄에 마지막 'EOT' 기호를 추가합니다.
생산하는 건설 config.sh 파일.

prepend 대상의 내용을 target_file 해당 파일이 비어 있지 않은 경우.

잡초에 유닛을 추가합니다. 구성 같은 더하다 명령을 실행하지만 몇 가지 추가 테스트를 수행합니다.
제거하려면 '?상징' 그리고 '%상징' 라인에서 target_file 기호라면
원하지 않거나 조건부로 원하지 않습니다. '%' 형식은 내부적으로만 사용됩니다.
메타 구성 '에서 자체 .U 파일을 생성하는 동안.산' 디렉토리.

닦다 더하다 실제로는 추가 매크로 대체를 수행합니다. 그만큼
사용 가능한 매크로는 고정 배선 매크로 단락.

부수적으로, 메타 구성 생성 -조건 조건문을 처리하기 위해 내부적으로 명령
의존성. 직접 사용해서는 안 되지만 스캔하면 표시됩니다.
생성 Makefile FBI 증오 범죄 보고서 .산 디렉토리.

고정 배선 매크로
다음 매크로는 에서 인식됩니다. 닦음 명령에 포함되기 전에 대체됩니다.
구성:

다음에서 파생된 패키지의 기본 개정 번호입니다. 패키지.

현재 날짜입니다.


귀하로부터 파생된 이 패키지 관리자의 이메일 주소
패키지.


패키지 이름(귀하의 이름에서 파생됨) 패키지 파일.


패치 수준은 메타 구성 프로그램 (더 이상 사용되지 않음 ).


SVN 개정 수준은 메타 구성 프로그램)

버전 번호 메타 구성 프로그램)

이러한 매크로는 주로 다음을 식별하는 데 사용됩니다. 메타 구성 생성된 버전
특별한 구성 스크립트와 어떤 패키지에 대해 수행되었는지. 이메일 주소
유지관리자는 다음과 같은 주요 지침에 내장되어 있습니다. 구성 시작할 때 인쇄됩니다.

최근 메타 구성 버전은 다음 형식의 훨씬 더 일반적인 구문을 이해합니다.

<$변수>

이는 구성 생성 시간에 다음 값으로 대체됩니다. 변수 당신에게서 가져온
패키지 파일. 결국 기존의 하드와이어 매크로 형식은 사라지고 <$baserev>
대체할 것이다 제공된 모든 단위에서.

이달의 스페셜 단위
코드를 인수분해하고 더 높은 수준의 코드를 제공하기 위해 다음과 같은 특수 단위가 사용됩니다.
기능. 그들은 소스로 제공될 수 있는 쉘 스크립트를 생성하거나 쉘을 생성합니다.
변수가 될 수 있다 평가'ed. 매개변수 전달은 잘 알려진 변수를 통해 수행됩니다.
$1, $2 등과 같은 이름 또는 익명...(셸을 통해 쉽게 설정할 수 있음) 세트
운영자). 언제 구성 실행하고, 생성하고, UU 디렉토리, 그래서 모든
생성된 스크립트는 거기에 있으며 패키지의 파일을 방해하지 않습니다.

알아야 할 특별 단위와 사용 방법은 다음과 같습니다.

Cppsym.U
이 유닛은 다음과 같은 쉘 스크립트를 생성합니다. Cppsym, 이는 결정하는 데 사용될 수 있습니다.
목록의 기호가 C 전처리기 또는 C 컴파일러에 의해 정의되었는지 여부
지정. 모든 기호의 상태를 확인할 수 있습니다.
(속성 목록)이 더 쉽게 결정됩니다.

Csym.U
이는 내부적으로 사용되는 $csym 쉘 변수를 설정합니다. 구성 여부를 확인하기 위해
주어진 C 기호가 정의되었는지 여부입니다. 일반적인 용도는 다음과 같습니다.

기호 결과 설정 [-fva] [이전]
평가 $csym

그러면 결과 함수 [-f], 변수 [-v] 또는
배열 [-a]가 정의되어 있고, 그렇지 않으면 'false'입니다. 이전 값이 주어지고 -r
스위치가 제공되었습니다 구성 (참조 구성 옵션 단락) 그러면 그
값은 질문 없이 재사용됩니다.

이 계산이 수행되는 방식은 사용자가 질문에 제공하는 답변에 따라 다릅니다.
구성 다음을 수행해야 하는지 여부를 묻습니다. nm 추출 여부. 만약
추출이 수행되면 장치는 단순히 기호 목록을 살펴봅니다. 그렇지 않으면
그렇지 않은 경우에는 컴파일 링크 테스트를 수행합니다. -r 이전에 계산된 것을 재사용하도록 주어졌습니다.
가치는 당연히...

엔드유
이 장치를 개인용으로 복사하여 U 디렉토리에 종속성을 추가하고
?MAKE: 라인을 사용하면 특정 유닛을 강제로 로드할 수 있습니다. 구성 그렇지 않더라도
그렇지 않으면 원했습니다. 일부 유닛은 강제로 구성 그런 식으로.

Filexp.U
이 장치는 쉘 스크립트를 생성합니다 파일엑스 다음으로 시작하는 파일 이름을 확장합니다.
물결표. 일반적인 용도는 다음과 같습니다.

exp_name=`./fileexp $name`

확장된 파일 이름을 할당하려면 exp_name.

Findhdr.U
이 장치는 findhdr 헤더 파일을 찾는 데 사용되는 스크립트
$usrinc 또는 cpp 기능을 사용하는 다른 낯선 장소. 스크립트에는
'stdio.h' 또는 'sys/file.h'와 같은 파일 기본 이름을 포함하고 전체 경로를 반환합니다.
inlcude 파일과 0 상태가 발견된 경우 또는 빈 문자열과 0이 아닌 상태
파일을 찾을 수 없는 경우.

Getfile.U
이 장치는 파일을 얻기 위해 소스로 제공되어야 하는 약간의 쉘 코드를 생성합니다.
이름을 지정하고 건강 상태를 확인하세요. 선택적으로 ~name 확장이 수행됩니다.

본 기기를 사용하려면, $rp$dflt 질문과 기본 답변을 보유해야 합니다.
그대로 전달됩니다. 내 책 스크립트(향후 참조 마이리드.유). $fn
변수는 작업을 제어하고 결과는 $ans.

파일이나 디렉터리를 찾으려면 'f' 또는 'd'를 입력하세요. 에프~/. '~'가 나타나면 ~name
대체가 허용됩니다. '/'가 나타나면 절대 경로 이름만 허용되며
~name 대체는 항상 반환되기 전에 확장됩니다. '+'를 지정하면
존재 확인을 건너뜁니다. 내에 'n'이 나타나는 경우 $fn, 사용자는 다음을 수행할 수 있습니다.
'없음'이라고 대답하세요.

일반적으로 이식성을 요청하지 않는 한 요청 시 ~name 대체가 발생합니다.
그러나 이식성을 우회하고 강제로
치환. 그렇게 하려면 'e' 문자(확장)를 사용할 수 있습니다.

특별한 'l'(찾기) 유형이 사용되는 경우 $fn 변수는 ':'으로 끝나야 합니다.
그 뒤에 파일 기본 이름이 옵니다. 대답이 디렉터리인 경우 파일 기본 이름은 다음과 같습니다.
파일 존재 여부를 테스트하기 전에 추가됩니다. 이는 찾기 스타일 질문에 유용합니다.
이렇게 :

dflt='~뉴스/lib'
: 'l'을 사용할 경우 'd' 또는 'f'를 지정할 필요가 없습니다.
fn='l~:활성'
rp='활성 파일은 어디에 있습니까?'
. ./getfile
활성="$ans"

또한 'p'(경로) 문자를 'l'과 함께 사용하여 다음을 알릴 수 있습니다.
파일 가져오기 '/'가 없는 답변은 허용되어야 합니다.
이 값이 필요할 때 모든 사람의 PATH에 있어야 합니다.

또한 수락해야 하는 답변 목록을 지정할 수 있는 기능도 유용합니다.
모든 검사를 우회합니다. 이 목록은 괄호와 항목 안에 있어야 합니다.
공백 없이 쉼표로 구분해야 합니다. 인용하는 것을 잊지 마세요.
괄호는 쉘에 의미가 있으므로 결과 문자열입니다. 예를 들어:

dflt='/bin/설치'
fn='/fe~(설치,./install)'
rp='어떤 설치 프로그램을 사용하시겠습니까?'
. ./getfile
설치="$ans"

사용자는 기존 파일을 참조하는 정규화된 경로만 지정할 수 있습니다.
하지만 특수한 "install" 및 "./install" 답변은 그대로 허용합니다(다음을 가정).
물론 나중에 체인에서 특별히 처리할 일이 있을 것입니다.
일반적인 예상 프레임과 일치하지 않음).

질문에 대한 대답이 '없음'이면 존재 확인을 건너뛰고
빈 문자열이 반환됩니다. 그 이후로 참고하세요 파일 가져오기 통화 내 책 내부적으로는 모두
함께 사용할 수 있는 기능 내 책 여기에 신청하세요.

완전히 확장된 값이 필요한 경우(예: Makefile에서) 다음을 사용할 수 있습니다.
전에, $ansexp 항상 올바르게 설정되는 변수 파일 가져오기 확장됨에 따라
버전 $ans. 물론, ~name을 허용하지 않으면 확장되지 않습니다.
에서 XNUMX 위 $fn 변하기 쉬운.

Inhdr.U
이 장치는 $inhdr 내부적으로 사용되는 쉘 변수 구성 확인하는
헤더 세트가 존재하는지 여부. 일반적인 용도는 다음과 같습니다.

헤더 i_header 설정 [ header2 i_header2 ... ]
평가 $inhdr

그러면 헤더를 찾았는지 여부를 알리는 메시지가 인쇄되고
i_header 그에 따라 가변적입니다. 두 개 이상의 헤더가 지정되고 첫 번째 헤더가 지정된 경우
헤더를 찾을 수 없으면 목록이 비어 있거나 하나를 찾을 때까지 다음 헤더를 시도합니다.

Inlibc.U
이 장치는 $inlibc 내부적으로 사용되는 쉘 변수 구성 확인하는
주어진 C 함수가 정의되었는지 여부. 일반적인 용도는 다음과 같습니다.

함수 d_func 설정
평가 $inlibc

그러면 함수가 발견되었는지 여부를 알리는 메시지가 인쇄되고 설정됩니다.
$d_func 따라서. 내부적으로는 $csym 일상.

로크유
이 중요한 단위는 쉘 스크립트를 생성합니다 LOC 이는 어디에 있는지 알아내는 데 사용할 수 있습니다.
디렉토리 목록에 특정 파일이 있습니다. 첫 번째 인수는 파일을 지정합니다.
두 번째 인수는 검색이 실패할 경우 반환될 항목이며,
reaming 인수는 파일을 검색할 디렉터리 목록입니다. 을 위한
예:

dflt=`./loc sendmail.cf X 를 / usr / lib에 /var/lib/sendmail / lib`

설정할 것이다 $dfltX 아니라면 sendmail.cf 파일이 나열된 디렉토리 아래에서 발견되었습니다.
또는 뭔가 /usr/lib/sendmail.cf 일부 시스템에서는. 또한보십시오 Getfile.U.

메일작성자.U
이 유닛을 만들려면 개인 End.U의 ?MAKE: 라인에 포함되어야 합니다.
그것으로 구성. 선택적으로 사용자가 작성자에게 자신을 등록할 수 있도록 제공합니다.
새 패치가 도착하면 알림을 받거나 발행될 때 자동으로 수신됩니다.
설치해야합니다. 메일 에이전트 이를 수행하려면(최소 버전 3.0)

메일리스트.U
이 유닛을 만들려면 개인 End.U의 ?MAKE: 라인에 포함되어야 합니다.
그것으로 구성. 사용자에게 메일링 리스트를 구독하거나 구독 취소할 수 있는 옵션을 제공합니다.
패키지와 관련된 논의가 진행되는 곳입니다. 당신은 실행해야합니다 팩키니트
메일링 리스트 관련 질문에 답하여 적절한 변수를 설정하세요.
패키지 본 장치가 작동하기 전에.

마이니트.U
이 장치를 개인용으로 복사하세요. U 일부에 자신의 기본값을 추가하는 디렉토리
내부 변수. 이 장치는 구성 결국 기본값
초기화가 완료되었습니다.

마이리드.유
이 장치는 내 책 작업을 수행하기 위해 소스로 제공되어야 하는 쉘 스크립트
읽다. 다음과 같이 쉘 이스케이프, 기본 할당 및 매개변수 평가를 허용합니다.
Instruct.U 유닛에 문서화되어 있습니다. 또한 -d 선택권,
나머지 스크립트 실행에 사용됩니다.

본 기기를 사용하려면, $rp 질문을 품고 있어야 하며 $dflt 기본값을 포함해야 합니다
답변. 질문은 스크립트 자체에 의해 인쇄되고 결과가 반환됩니다.
FBI 증오 범죄 보고서 $ans 변하기 쉬운.

일반적인 사용법은 다음과 같습니다.

dflt='y'
rp='질문?'
. ./myread
값="$ans"

자세한 내용은 장치 자체를 참조하십시오.

올드컨피그.U
이 유닛은 일부 유닛이 시도할 때 종속성 ?MAKE: 라인의 일부여야 합니다.
이전 기호 값을 재사용합니다. 이 단위는 이전 답변을 얻는 역할을 담당합니다.
config.sh 또는 특정 플랫폼에서 실행할 때 유용한 힌트를 제공합니다.
처음으로. 참조 구성 힌트 힌트에 대한 자세한 내용은 단락을 참조하세요.

접두사.U
이 장치의 목적은 설치 접두사 디렉터리의 변경 사항을 감지하는 것입니다.
이전 답변에서 적합한 기본값을 자동으로 다시 계산합니다. 그것은 다음에 의존합니다
가치 $oldprefix 이전 접두사 디렉터리를 보유하는 변수
변경되고 그렇지 않으면 비어 있습니다. 예를 들어 접두사가 다음에서 변경된 경우 /고르다
/ usr / local, 이전 바이너리 설치 디렉터리가 다음에서 변경됩니다.
/옵션/빈/ usr / local / bin, 또는 다음과 같은 경우 변경되지 않은 상태로 유지됩니다. /큰 상자.

당신은 전화해야합니다 세트 발행하기 전에 평가 on $prefixit같은 :

dflt var [디렉터리] 설정
평가 $prefixit

어느 것이 설정될 것인가 $dflt$var or $접두사/디렉터리 접두사가 남아 있는지 여부에 따라
같든 아니든. 만약에 DIR 문자열이다 없음, 단일 공간 값 $dflt 다음과 같이 유지됩니다.
접두사가 변경된 경우에도 마찬가지입니다. 만약에 DIR 생략된 다음 $dflt 빈으로 설정되어 있습니다
접두사가 변경된 경우 문자열 $var 그렇지 않으면.

접두사.U
이 장치의 의도는 Prefixit.U의 의도와 유사합니다. 즉, 문제를 해결하는 데 도움이 됩니다.
접두사 변경 사항을 수용하기 위한 기본 문자열입니다. 그러나 쉘 변수 $prefixup,
평가 시 ~name 확장만 복원하며 접두사에 이러한 이스케이프를 사용해야 합니다.
기구. 다음과 같이 사용하세요:

dflt 설정
평가 $prefixup

메시지를 표시하기 전에 파일 가져오기 예를 들어. 접두사가 ~name을 사용하지 않는 경우
확장하면 위의 작업은 더 이상 작동하지 않습니다. y 가변적이죠, 당연히.

Typedef.U
이 장치는 $typedef 내부적으로 사용되는 쉘 변수 구성 확인하는
typedef가 존재하는지 여부. 일반적인 용도는 다음과 같습니다.

typedef val_t 기본값 설정 [ 포함 ]
평가 $typedef

이렇게 하면 변수가 설정됩니다. val_t 가치에 디폴트 값 typedef를 찾을 수 없는 경우
나열된 포함 파일 중 또는 형식 정의 발견되면. 포함 파일이 없는 경우
지정하면 장치가 다음을 찾습니다. 오직. 일부 포함을 지정하면
그것들이 보입니다.

유닉스.U
이 단원의 목적은 변수를 통해 가장 일반적인 UNIX-ism 중 일부를 정의하는 것입니다.
명령줄이나 적절한 힌트 파일을 통해 변경할 수 있습니다. 특히,
$_exe, $_o$_a 설정되어 있습니다. 모든 단위는 참조해야합니다 $_o 그리고하지 .o 직접.
'.' 이 변수의 일부입니다.

Setvar.U
이 장치는 내부적으로 사용되는 변수를 생성합니다. 구성 설정
밝히다/undef 특정 기호에 대한 값, 갑자기 변경되면 경고 표시
이전 값에서. 예를 들어:

val="$define"
d_변수 설정
평가 $setvar

이전의 경우 $d_변수 값이 null이 아니고 $값 달라요, "워"
경고가 발령됩니다.

워.유
이 장치는 다음과 같은 경우 경고를 내보내는 스크립트 가치 변수에
누구의 이름은 $var 이전에 보유했던 값과 동일하지 않습니다. $이었다. 에
반환, $td$tu 적절한 값을 유지 밝히다 or 언데프 변수. 보다
의 예 Inlibc.U.

빌트인 전처리기
포함될 각 단위 구성 내장된 전처리기를 통해 실행됩니다. 사전
프로세서 명령문은 '@' 문자로 시작됩니다('#'은 쉘 주석입니다).
성격). C 전처리기처럼 작동하지만 쉘과 펄을 허용합니다.
탈출하다. 사용 가능한 기능은 다음과 같습니다.

@만약에 표현
If 표현 true인 경우 @end, @elsif 또는 @else까지 코드를 계속 로드합니다.

@엘시프 표현
대체 선택. 만약에 표현 true인 경우 @end까지 코드 로드를 계속합니다.
또 다른 @elsif 또는 @else.

@else @if가 로드되는 경우 기본 코드 표현 거짓이었고 그 어느 것도
선택적 @elsif가 일치합니다. @end까지 로드합니다.

@end @if로 연 조건부 로딩 문을 닫습니다.

@정의하다 상징
전처리기에게 다음과 같이 알려줍니다. 상징 지금부터 정의됩니다.

조건부 표현 기호 이름을 포함할 수 있습니다(기호가 필요한 경우 값은 true입니다.
정의를 통해 @정의하다 또는 쉘/펄이 이스케이프됩니다. 이 원자들은 다음을 사용하여 결합될 수 있습니다.
전통적인 부울 연산자 '!' 부정의 경우 '&&', 논리 and의 경우 '||' 논리적인 경우
또는.

단일 괄호 안에 있는 텍스트는 쉘 테스트이고, 이중 괄호 사이의 텍스트는 셸 테스트입니다.
펄 테스트. 즉, 표현식은 다음과 같습니다.

{ 껍질 본문 }
{{ 본문 }}

다음과 같이 번역됩니다:

if 껍질 본문 >/dev/null 2>&1; 그런 다음 0을 종료하십시오. 그렇지 않으면 1번 출구; fi
if ( 본문) {출구 0;} 그렇지 않으면 {출구 1;}

종료 상태는 부울 값을 얻기 위해 표준 방식으로 사용됩니다. 즉, 0은 true이고
다른 모든 것은 거짓입니다. Perl에서는 간단한 조건만 표현할 수 있습니다.
일부 복잡한 코드를 로드할 수 있습니다. 메타 구성 그리고 실행되었습니다.

내장된 전처리기를 사용하여 일부 장치를 미세 조정할 수 있습니다(참조: d_gethname.U A에 대한
복잡한 예) 프로그램이나 파일에서 실제로 사용하는 기호에 따라 다름
배포판에 존재합니다. 예를 들어, 올드컨피그.U 다음과 같은 테스트를 사용합니다.

@if {test -d ../힌트}

구성 힌트가 있는 경우에만 힌트 종속 코드를 포함합니다. 힌트 의 디렉토리
패키지의 최상위 디렉토리. 테스트는 '.산' 디렉토리,
따라서 테스트에 '../'가 필요합니다.

기호가 존재하지 않을 때 쓸모없는 코드를 넣는 것을 방지하기 위해 전처리기를 사용할 수도 있습니다.
한정된. 하나 이상의 기호를 정의하는 단위는 그런 식으로 보호될 수 있습니다(단위가 다음과 같기 때문입니다).
@if/@end 쌍 내에서 기호 종속 코드를 수집하여 전체적으로 로드됩니다. 을 위한
예:

@if I_TIME || I_SYS_TIME || I_SYS_TIME_KERNEL
need_time_h='true'
@또 다른
need_time_h='false'
@종료

소스 코드가 제어하는 ​​세 가지 기호 중 하나를 사용하는지 여부를 테스트합니다.
전에, 시간.h or sys/time.h 이에 따라 쉘 기호를 포함하고 정의하십시오. 그것은 준다
구성 소스에 필요한 사항에 대한 피드백을 제공하고 수정으로 인한 단점을 방지합니다.
냉동 단위.

'?W:' 줄을 통해 흥미로운 조합을 얻을 수 있습니다. 예를 들어, 아이타임.유 단위
C 소스가 다음을 사용하는지 여부를 알아야 합니다. 구조체 시간대 유형. 그러므로,
라인 :

?W::시간대

기호를 정의하는 부작용에 사용됩니다. 시간대 전처리기에 대한 것입니다. 그만큼
그러면 단위 코드는 다음과 같이 말할 수 있습니다.

@if 시간대
'-DS_TIMEZONE' ''의 s_timezone에 대해; 하다
@또 다른
s_timezone=''
@종료

... s_timezone을 사용하는 코드 ...

@if 시간대

@종료

두 개의 연속 값을 시도하는 추가 루프가 있습니다. s_timezone 가변적이지만 단지
필요한 경우.

시대에 뒤 떨어진 기호
더 이상 사용되지 않는 기호는 이전 기호로 쉽게 전환할 수 있도록 보존됩니다. 메타 구성 단위. 하지 않는 한
전에, -o 스위치가 전달됩니다. 메타 구성 그들은 무시될 것입니다. 그러나 시대에 뒤 떨어진 파일은
생성되어 어떤 파일이 더 이상 사용되지 않는 기호를 사용하고 있는지, 무엇을 사용하는지 알려줍니다.
사용할 새로운 기호입니다.

더 이상 사용되지 않는 기호의 수명은 하나의 전체 개정판입니다. 즉, 해당 기호는 다음과 같은 경우 제거됩니다.
다음 기본 개정판이 발행됩니다(패치 업그레이드는 물론 포함되지 않음). 그러므로 그것은
가능한 한 빨리 소스를 번역하고 새로운 기호를 사용하는 것이 현명합니다.

구성 힌트
내부 구성 논리가 잘못된 선택을 하는 경우가 발생할 수 있습니다. 을 위한
예를 들어 일부 플랫폼에서는 vfork () 시스템 호출이 존재하지만 손상되었으므로 이를 수행해야 합니다.
사용할 수 없습니다. 해당 지식을 단위 자체에 포함시키는 것은 불가능합니다.
이는 공급업체가 결국 해결하게 될 일시적인 문제일 수도 있고,
새로운 OS 업그레이드로 도입되었습니다.

어쨌든 시스템에 너무 특정적인 작은 문제들에 대해서는 메타 구성
힌트 파일 지원을 제공합니다. 이를 사용하려면 힌트 의 디렉토리
패키지의 최상위 디렉토리이며 실행 시 이 디렉토리를 갖습니다. 메타 구성. 그러면
힌트 관련 부분 올드컨피그.U.

그때부터 일부 쉘 변수를 미리 설정할 수 있습니다. 구성 OS 특정에서 사용
.sh 파일. 코드가 들어있습니다 올드컨피그.U 어떤 힌트 파일이 필요한지 추측하려고 시도합니다.
시스템 OS 이름, 커널 이름, 릴리스를 기반으로 표준 이름을 계산합니다.
번호 등... 이 정보는 급변할 가능성이 높기 때문에 기록하지 않습니다.
여기. 코드를 리버스 엔지니어링해야 합니다. 올드컨피그.U.

패키지를 처음 릴리스할 때 힌트 파일 디렉터리는 비어 있어야 합니다. 만약
패키지 사용자가 문제가 있다고 불평합니다. 구성 기본값은
특정 시스템의 경우 이것이 플랫폼 특정 문제인지 아니면
일반 것. 전자의 경우에는 새로운 힌트 파일을 소개할 시간입니다.
후자의 경우 해당 단위를 수정해야 합니다.

예를 들어, SGI 시스템은 손상된 것으로 알려져 있습니다. vfork () 시스템 호출, 이것으로
글쓰기. 해당 힌트 파일 이름은 다음과 같습니다. sgi.sh. 따라서 당신이 해야 할 일은 만들기만 하면 됩니다.
a 힌트/sgi.sh 당신이 쓰는 파일 :

d_vfork="$define"

항상 다시 매핑됩니다 vfork on 포크 (참조 d_vfork.U). SGI 시스템에서 실행할 때
처음으로, 구성 있음을 감지하게 됩니다. 힌트/sgi.sh 파일이 있고 현재 진행 중인 작업은
IRIX 머신(커널 이름은 대개 /irix임)이므로 다음을 제안합니다. SGI
가능한 힌트. 사용자가 이를 수락한 경우, 이후 $d_vfork 값은 다음을 통해 수정됩니다.
$세트바 전화해, 아 와! 값을 재정의하려고 한다는 것을 경고하기 위해 내보내집니다.
에 의해 계산 구성.

제공할 필요는 없습니다. 모든 알려진 힌트 올드컨피그.U. 힌트 파일이 있는 경우
누락된 경우 가능한 선택으로 제안되지 않습니다. 휴리스틱 테스트는 계산을 위해 실행되었습니다.
가능한 힌트 후보는 불안정합니다. 새로운 값이나 다른 테스트가 있는 경우
나한테 보내줘...

재정의 선택
당신이 만드는 경우 구성.오버 최상위 디렉토리에 있는 파일, 구성 당신이 물어볼 것입니다
기본값을 무시하기 위해 로드하려고 합니다. 이는 생성 전에 수행됩니다.
config.sh 파일에 저장된 값을 패치할 수 있는 기회를 제공합니다.

이는 사용자가 저장하는 로컬 파일이라는 점에서 힌트 접근 방식과 다릅니다.
자신의 용도에 맞게 자유롭게 만들 수 있습니다. 이러한 파일을 직접 제공해서는 안 되지만,
사용자는 이 가능성에 대해 알고 있습니다.

구성 옵션
XNUMXD덴탈의 구성 스크립트는 명령줄에 지정된 일부 옵션과 함께 호출될 수 있습니다.
동작을 약간 수정합니다. 허용되는 옵션은 다음과 같습니다.

-d 모든 답변에 기본값을 사용하세요.

-e 제작 과정을 지나 질문 없이 진행하세요. config.sh.

-f 파일 지정된 파일을 기본 구성으로 사용합니다. 이 스위치를 사용하지 않으면
구성은 다음에서 가져옵니다. config.sh, 존재할 때.

-h 도움말 메시지를 인쇄하고 종료합니다.

-r 가능하면 C 기호 값을 재사용하세요. 이렇게 하면 비용이 많이 드는 작업을 건너뛸 수 있습니다. nm 상징
추출. 처음 사용하는 경우(이전 구성 파일 없이)
구성 에 대해 알기 위해 작은 프로그램을 컴파일하고 링크하려고 노력할 것입니다.
기호의 존재 또는 부재.

-s 무음 모드. 파일 설명자 #4에 인쇄된 문자열만
화면(중요한 메시지입니다). 완전히 끌 수는 없습니다
어떤 출력이든 사용할 수 있지만 '구성 -ders > / dev / null 2> 및 1' 가득 차다
출력이나 사용자 상호 작용이 필요하지 않은 일괄 실행입니다.

-D 기호=값
사전 정의 상징 지정된 것을 견디다 가치. '를 사용하는 것도 가능합니다.-D
상징' 기본값인 'define'을 사용합니다.

-E 구성 질문이 끝나면 중지하세요.
config.sh. 이 작업은 ''을 수행하지 않습니다.확인 따라' 또는 .SH 파일 추출.

-K 지식이 풍부한 사용자. 이 옵션을 사용하면 현재 수행 중인 작업과
따라서 config.sh 파일은 항상 의도된 것처럼 처리됩니다.
외계 시스템에서 생성되었을 수도 있지만 재사용됩니다. 또한
다음과 같은 경우 중단을 방지합니다. 구성 사용할 수 없는 C 컴파일러 또는 잘못된 세트를 감지합니다.
C 플래그 중. 이 옵션을 통해 추가 단축키를 켤 수도 있습니다.
미래. 이 옵션은 다음 문서에 설명되어 있습니다. 구성 사용법 메시지, 우리에게 상기시키기 위해
그러나 주어진 설명은 충분히 비밀스러울 것으로 기대됩니다.
:-)

-O 다음을 통해 지정된 값을 허용합니다. -D or -U 로드된 모든 설정을 재정의하려면
구성 파일. 재정의는 기본 동작이 아닙니다.
현재 변경 중인 변수에서 파생된 변수로 전파되지 않습니다.
없이 자연스럽게 -O, 구성 파일이 없는 경우에만 설정이 수행됩니다.
미분변수가 아직 계산되지 않았기 때문에 안전합니다...

-S 모든 .SH 파일에 대해 변수 대체를 수행합니다. 와 결합할 수 있습니다.
-f 원하는 구성을 전파하도록 전환하세요.

-U 기호=
사전 설정 상징 빈 값을 갖습니다. '를 사용하는 것도 가능합니다.-U 상징'
어느 것이 설정될 것인가 상징 'undef'로.

-V 버전 번호를 인쇄하세요. 메타 구성 이것이 이것을 생성한 구성 스크립트
종료하십시오.

달리는 환경
시작하면, 구성 로컬을 생성합니다 UU 디렉토리에서 실행됩니다. 디렉토리
구성이 종료되면 제거되지만 이는 다음 위치에서 스크립트를 실행해야 함을 의미합니다.
즉, 읽기 전용 파일 시스템이 아닌 쓰기가 가능합니다.

당신은 실행할 수 있습니다 구성 그러나 다음과 같이 원격으로:

../패키지/구성

로컬에 존재하지 않는 소스를 구성합니다. 생성된 모든 파일은 다음 위치에 저장됩니다.
스크립트를 실행 중인 디렉터리입니다. 이 마법은 src.U 덕분에 이루어졌습니다.
설정하고 있는 유닛 $src$rsrc 패키지 소스를 가리키는 변수입니다. 저것
경로는 전체 또는 상대 경로인지 여부에 따라 달라집니다. 구성 전체 또는
상대 경로.

내에서 UU 하위 디렉토리를 사용할 수 있습니다 $rsrc 소스 파일에 액세스하려면(단위
소스 파일 링크 힌트를 참조할 때 항상 이 메커니즘을 사용해야 하며
파일은 상위 디렉터리에 있습니다). 모든 Makefile은 $src 변수를 사용해야 합니다.
빌드 디렉터리 상단의 소스에 대한 포인터(여기서 구성 실행됨),
직접 또는 VPATH 설정을 통해.

달리기 중일 때 구성 원격으로 .SH 파일은 빌드 디렉터리에서 추출됩니다.
소스 트리에서. 그러나 이를 위해서는 일종의 확인 컴파일할 수 있도록 지원
소스는 다른 곳에 있지만 빌드 디렉토리에 있는 것입니다.

사용 마법 재정의
를 활용하여 -M 전환하면 일부 매직 재매핑이 confmagic.h
파일. 해당 파일은 다음에 포함되어야 합니다. 구성.h물론, 하지만 결국에도
다른 필요한 포함 파일. 즉:

#include "config.h"
...
... other 포함 ...
...
#include "confmagic.h"

일반적으로, confmagic.h 다시 매핑하려고 시도합니다 비복사() on memcpy () 아니라면 비복사() is
로컬에서 사용 가능하거나 변환 가능 vfork 으로 포크 필요한 경우에는 쓸모가 없게 만듭니다.
~에 대해 신경쓰다 HAS_VFORK 상징.

이 구성 매직은 용어집 파일에 설명되어 있습니다.

단위 Canva의 제작된 채널아트 템플릿을
단위 템플릿 세트가 있습니다. 메타 구성 소스 디렉토리는 다음과 같습니다.
다양한 종류의 새로운 단위를 신속하게 생성하기 위해 (아직 작성되지 않은) 프로그램에서 사용됩니다.
상황. 이 미완성 프로젝트에 대한 문서는 없지만 언급해야겠다고 생각했습니다.
직접 해보고 기여하고 싶다면 매뉴얼 페이지에서...

작가


래리 월lwall@netlabs.com> 버전 2.0의 경우.
할란 스텐harlan@mumps.pfcs.com> 중요한 유닛 확장의 경우.
라파엘 만프레디ram@hptnos02.grenoble.hp.com>.
그 외 많은 기여자들 메타 구성 단위. 목록은 신용 파일을 참조하세요.

onworks.net 서비스를 사용하여 온라인으로 Metaconfig 사용



최신 Linux 및 Windows 온라인 프로그램