이 코드는 GNU makefile 매뉴얼의 8.6장에서 가져온 것입니다.
@무슨 뜻인가요?[이메일 보호됨]makefile의 파일 함수 arg는 무엇을 의미합니까? rm과 같은 쉘 명령 앞에 "@" 기호가 붙는 이유는 무엇입니까?
program: $(OBJECTS)
$(file >[email protected],$^)
$(CMD) $(CMDFLAGS) @[email protected]
@rm [email protected]
파일 함수 구문은 다음과 같습니다.
$(file op filename[,text])
답변1
여기에는 서로 관련이 없는 세 가지 용도가 있습니다 @
.
에서 $@
캐릭터 @
는 이름이다자동변수규칙에서 사용할 수 있습니다. 이 변수의 값은 규칙이 구축되는 대상입니다.
@
레시피(명령줄) 줄의 시작 부분, 즉 탭 문자 바로 뒤에 사용 하면 명령이 실행됩니다.인쇄하지 않음실행되려고 할 때.
다른 곳의 캐릭터는 @
특별한 것이 아닙니다.
따라서 귀하의 예에서는 다음을 구축하십시오 program
.
- 이것
file
기능호출됩니다. 대상( 자동 변수)$^
의 종속성을 파일에 기록합니다program.in
. 변수에 저장된 모든 명령은
CMD
변수에 저장된 매개변수CMDFLAGS
와 추가 매개변수를 사용하여 실행됩니다@program.in
. 이것이 하는 일은CMD
그것이 무엇인지에 달려 있습니다.명령은
rm program.in
먼저 인쇄하지 않고 실행됩니다.
일부 명령은 시작 부분의 매개변수를 @
더 많은 매개변수를 읽을 파일을 나타내는 것으로 처리합니다. 이는 DOS가 명령줄 길이에 엄격한 제한을 두고 명령줄에 명령 출력을 삽입할 수 없기 때문에 발생한 DOS 규칙입니다. Unix에는 이러한 제한이 없기 때문에 이는 Unix 세계에서는 일반적이지 않습니다. 따라서 이 공식의 효과는 다음과 관련이 있을 수 있습니다.
$(CMD) $(CMDFLAGS) $(OBJECTS)
답변2
@ 접두사온라인 진압에코선.
기본적으로 각 줄은 실행 전에 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
@
줄의 시작 부분 만 억제됩니다.에코. 아니면 그냥 일반 문자열이고 다음으로 확장됩니다.>[email protected]
@[email protected]
$@
$ cat hello
hello:
@echo @[email protected]
$make hello
@hello.in