Makefile 종속성에서 "[email protected]"을 사용하면 작동하지 않습니다.

Makefile 종속성에서 "[email protected]"을 사용하면 작동하지 않습니다.

다음 규칙과 같은 Makefile을 시도했지만 작동하지 않습니다(GNU Make 4.0):

foo:   [email protected] other.o

bar:   bar.o other.o

파일은 foo.c(로) 컴파일되지만 foo.o링크 명령은 입니다 cc -o .o.

대신 bar올바르게 컴파일되고 cc bar.o other.o -o bar.

누구든지 차이점(또는 문제)을 설명할 수 있습니까?

답변1

이 내용은 다음 섹션에서 다룹니다.자동변수GNU Make 매뉴얼에서:

자동 변수에 사용할 수 있는 값의 제한된 범위를 인식하는 것이 중요합니다. 자동 변수에는 레시피 내의 값만 있습니다. 특히 규칙의 대상 목록 어디에서나 사용할 수 없습니다. 여기에는 값이 없으며 빈 문자열로 확장됩니다. 또한 규칙의 필수 구성 요소 목록에서 직접 액세스할 수 없습니다. 일반적인 실수는 $@전제 조건 목록에서 사용하려고 시도하는 것입니다.

이 단락의 나머지 부분에서는 GNU Make 전용 솔루션이기는 하지만 가능한 솔루션을 제공합니다.두 번째 확장. Makefile을 다음과 같이 작성하십시오.

.SECONDEXPANSION:

foo:   [email protected] other.o

bar:   bar.o other.o

$$@적절한 값을 부여 할 수 있으며 ,

$ make foo
cc    -c -o foo.o foo.c
cc    -c -o other.o other.c
cc   foo.o other.o   -o foo

당신이 원하는 것을 하세요.

(내 경험상 2차 전개에 의존하는 것보다 문제를 해결하는 더 좋은 방법이 종종 있지만 이는 수행하려는 작업의 전반적인 목표를 이해해야만 결정할 수 있습니다.)

관련 정보