내가 쓰고 있어요 터미널 매치 아무것도 패턴 규칙 즉,
%::
다른 경우 예상대로 만 실행됩니다 것을, 목표는 일치하지 않습니다. 그것에서 조리법 나는 메이크의 반복하려는 명시 적 목표 발견 된 패턴 (경우 체크$*
) 다른의 시작입니다 대상
지금까지 원하는 모든 대상을 공백으로 구분 된 문자열로 가져와 변수에 저장하고 TARGETS
있지만 문자열의 각 단어를 반복 할 수 있도록 배열로 바꿀 수는 없습니다.
예를 들어
%:: $(eval TARGETS ::= $(shell grep -Ph "^[^\t].*::.*##" ./Makefile | cut -d : -f 1 | sort)) echo $(TARGETS)
내가 기대했던 것을 제공합니다.
build clean compile deploy execute init run serve
루프 $(TARGET)
내의 각 문자열 단어를 어떻게 반복 할 수 GNU Make 4.2.1
있습니까?
BASH 솔루션을 많이 찾았지만 내 테스트에서는 작동하지 않았습니다.
그것은 일반적으로 사용하는 정말 나쁜 생각 eval
과 shell
조리법 내부. 레시피는 이미 쉘 스크립트이므로 쉘 스크립팅 만 사용해야합니다.
정확히 무엇을하고 싶은지 명확하지 않습니다. 레시피에서이 작업을 수행하려면 쉘 루프를 사용할 수 있습니다.
%::
TARGETS=$$(grep -Ph "^[^\t].*::.*##" ./Makefile | cut -d : -f 1 | sort); \
for t in $$TARGETS; do \
echo $$t; \
done
레시피 외부 에서 수행 하려면 GNU make foreach
함수를 사용할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다