추한 것일 수 있지만 다른 레서피에 지정된 값을 얻는 타겟 이름으로 매크로를 사용하고 싶습니다. 나는이 같은 평가 기능을 다른 조리법에 매크로/변수를 정의하는 방법을 알고 : 괜찮아요다른 레시피에서 목표 이름을 정의하십시오.
$ make say
what ever's in this file
:
read :
$(eval TEXT := $(shell cat somefile.txt))
say : read
echo ${TEXT}
그것은 될 것입니다. 또한 매크로를 사용하여 대상 이름을 정의 할 수 있습니다. 자, 예를 들어 타르 볼과 같은 파일이 있다고 가정 해 봅시다. 이름은 항상 'program-'로 시작하고 whith '.bar'로 끝나며 그 중간에 별도의 파일에있는 버전입니다. 'program-1.2.3.tar'. 따라서 원칙적으로이 파일의 대상을 다음과 같이 정의 할 수 있습니다.
VERSION = $(shell cat version.txt)
program-${VERSION}.tar :
tar cf program-${VERSION}.tar program-${VERSION}
괜찮 았던 것입니다. 그러나 사실은 내가 : 예컨대, 단지 대상이 파일을 읽을 수
.PHONY : getversion
getversion :
$(eval VERSION := $(shell cat version.txt))
program-${VERSION}.tar : gerversion
tar cf program-${VERSION}.tar program-${VERSION}
을 싶은데 이미 처음부터 만들 호출하여 대상의 이름을 결정하기 때문에 물론이 작동하지 않습니다. 여분의 makefile을 사용하지 않고 이상한 문제를 해결할 수있는 방법이 있습니까?
그래서 당신이 $ (VERSION)가 다른 뭔가도 평가 :이 모든에 메이크 파일을 단순화
Vroomfondel
that
및program-${VERSION}
사이에 포함 된 종속성이 아니라고 결론에 매우 강하게 암시? 나는 너의 문제를 완전히 괴롭히지 않는다, 미안. 어쩌면 우리는 빌드 프로세스와 다른 버전 번호의 관계를 말할 수 있습니다. 원래의 문제를 우회하는 것이 make의 기본 논리에 반하는 것보다 낫습니다. BTW에서는 쉘 호출을 저장하는 $ (file그래, $ {VERSION}은 네트워크에서 가져온 것이므로 필요할 때만 평가하고 싶습니다. 그러나 저는 그런 식으로 할 수있는 방법이 없다고 생각합니다. – weber
하지만 $ (VERSION) _은 항상 필요합니다. 그렇지 않으면 빌드를 계속하는 법을 모릅니다. 시간 절약은 어디에서 왔는가? "필요할 때만"평가할 때? – Vroomfondel