이 코드는 GNU makefile 매뉴얼의 8.6 장에서 발췌 한 것입니다.
makefile에서 파일 함수 arg에 대한 @ $ @. in은 무엇을 의미합니까? 왜 rm과 같은 셸 명령에 '@'기호가 붙는가?
program: $(OBJECTS)
$(file >$@.in,$^)
$(CMD) $(CMDFLAGS) @$@.in
@rm $@.in
파일 함수 구문은
$(file op filename[,text])
이 코드는 GNU makefile 매뉴얼의 8.6 장에서 발췌 한 것입니다.
makefile에서 파일 함수 arg에 대한 @ $ @. in은 무엇을 의미합니까? 왜 rm과 같은 셸 명령에 '@'기호가 붙는가?
program: $(OBJECTS)
$(file >$@.in,$^)
$(CMD) $(CMDFLAGS) @$@.in
@rm $@.in
파일 함수 구문은
$(file op filename[,text])
답변:
여기에는 관련이없는 세 가지 용도가 @
있습니다.
에서는 $@
, 캐릭터 @
의 이름을 자동 가변 규칙에 사용될 수있다. 해당 변수의 값은 규칙이 작성하는 대상입니다.
@
탭 문자 바로 뒤에 레시피 (명령) 줄의 맨 처음에 사용될 때 명령 을 실행하려고 할 때 명령 이 인쇄되지 않습니다 .
@
다른 곳 의 캐릭터 는 특별하지 않습니다.
따라서 귀하의 예에서 다음을 작성하십시오 program
.
file
기능이 호출됩니다. 대상 ( $^
자동 변수) 의 종속성을 파일에 씁니다 program.in
.변수에 저장된 명령은 CMD
변수에 저장된 매개 변수 CMDFLAGS
와 추가 매개 변수를 사용하여 실행 됩니다 @program.in
. 이것이하는 것은 무엇에 달려 있습니다 CMD
.
명령 rm program.in
은 먼저 인쇄하지 않고 실행됩니다.
일부 명령은 시작 @
매개 변수를 더 많은 매개 변수를 읽을 파일을 나타내는 것으로 간주합니다 . 이것은 DOS가 명령 행 길이를 엄격하게 제한하고 명령의 출력을 명령 행에 보간 할 방법이 없기 때문에 발생하는 DOS 규칙입니다. 유닉스에는 이러한 제한이 없기 때문에 유닉스 세계에서는 드문 일입니다. 레시피의 효과는 다음과 같습니다.
$(CMD) $(CMDFLAGS) $(OBJECTS)
줄의 @ 접두사 는 줄의 에코 를 억제 합니다.
기본적으로 실행되기 전에 make
각 줄을 인쇄합니다 Makefile
. 행이로 시작하면 @
해당 행이 인쇄되지 않습니다.
없이 @
:
$ cat > Makefile
hello:
echo hello world
$ make hello
echo hello world
hello world
로 @
:
$ cat > Makefile
hello:
@echo hello world
$ make hello
hello world
@
라인 시작시 에만 에코가 억제 됩니다. >$@.in
또는 @$@.in
그냥 일반 문자열이며 $@
확장됩니다.
$ cat hello
hello:
@echo @$@.in
$make hello
@hello.in
>$@.in
파일 모드로 사용 되는지 ... 그러나 그것은 그 자체로 유용합니다 .. 감사 cuonglm ...