makefile의 파일 함수는 "@" 기호가 접두어로 붙은 인수를 사용합니다.

makefile의 파일 함수는 "@" 기호가 접두어로 붙은 인수를 사용합니다.

이 코드는 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.

  1. 이것file기능호출됩니다. 대상( 자동 변수) $^의 종속성을 파일에 기록합니다 program.in.
  2. 변수에 저장된 모든 명령은 CMD변수에 저장된 매개변수 CMDFLAGS와 추가 매개변수를 사용하여 실행됩니다 @program.in. 이것이 하는 일은 CMD그것이 무엇인지에 달려 있습니다.

  3. 명령은 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

관련 정보