2009-08-24 2 views
20

GNU Make의 문서를 읽었습니다. %의 .c 인Makefile의 4 달러 기호

@set -e; rm -f [email protected]; \ 

    $(CC) -M $(CPPFLAGS) $< > [email protected]$$$$; \ 

    sed ’s,\($*\)\.o[ :]*,\1.o [email protected] : ,g’ < [email protected]$$$$ > [email protected]; \ 

    rm -f [email protected]$$$$ 

나는 C++ 프로그램이 시도 및 파일

init3d.d의 init3d의 목록을 가지고 예를 들면 다음과 같습니다

% .D이다 .d.18449 input.d input.d.18444

내가 찾은 것이지만 유감스럽지 않습니다. nderstand 같은 document

에 당신은 차 확장을 활성화하면 필수 목록에 리터럴 달러 기호, 당신은 실제로 네 달러 기호 ('$$$$')를 작성해야합니다.

4 달러 기호 "$$$$"가 실제로 무엇을 의미하는지 궁금합니다. 그들은 어떻게 18449, 18444 또는 18439입니까?

감사합니다.

답변

21

"보조 확장"을 사용하는 경우 실제 출력에 $을 생성하려면 $$$$이 필요합니다. $은 일반적으로 변수를 확장하거나 함수를 호출하는 데 사용됩니다. 보조 확장이 활성화 된 $$은 다른 작업을 수행하지만 그렇지 않은 경우 출력에 실제 $을 생성합니다.

Unix 계열 시스템에서 명령 행을 실행하는 데 사용하는 쉘은 일반적으로 $$을 쉘 프로세스 ID로 확장으로 해석합니다. 따라서 보조 확장을 사용하지 않으면 $$$$이 출력에서 ​​$$으로 바뀌고 셸은 프로세스 ID로 확장됩니다.

(접미사 임시 파일을 파일 이름의 고유성을 보장하기 위해 노력하는 간단한 방법으로 쉘 프로세스 ID를 사용.)

+0

차 확장 레시피 내용에 영향을 미치지 않습니다 : 여기에

그것을 보여주는 예입니다. 그냥 전제 조건입니다. 따라서'$$$$ '는 항상 recipe 컨텍스트에서'$$'을 생성합니다. 보조 확장이 켜져있을 때 하나의'$'를 얻기 위해서는 선행 조건 목록에'$$$$'만 있으면됩니다. ('$$ '을 사용하지 않을 때 얻을 수 있습니다). –

+0

이것은 답이 아닙니다. 2 차 확장은 부적절합니다. – reinierpost

+0

@reinierpost 그것은 Etan Reisner와 같은 이해 어려움을 겪고있는 것 같습니다. 원래의 포스터는 2 차 확장에 대해 이야기 했으므로 그것에 대해 썼습니다. 실제 설명은 두 번째 단락에 있으며, 해당 구문을 사용하는 가장 큰 이유는 괄호 안의 세 번째 단락에 나와 있습니다. –

2

18449, 18444 또는 18439와 같은 프로세스 ID는 프로세스 ID와 비슷합니다.

16

$$$로 변환하지만, 메이크 규칙에서됩니다 (쉘입니다 표현식)을 사용하는 경우 $\을 사용하거나 표현식 주위에 작은 따옴표 '을 사용하여 이스케이프 처리해야합니다.

DOLLAR:=$$ 
dollar: 
    echo '$$' > [email protected] 
    echo "\$$" >> [email protected] 
    echo '$(DOLLAR)' >> [email protected] 
    echo "\$(DOLLAR)" >> [email protected] 
    cat dollar 
+1

어머, 너를 사랑해. 저는 왜 '$$'이 나를 위해 무한하게 확장 하는지를 둘러 보았습니다. – Profpatsch

관련 문제