같은 방법으로 많은 파일을 처리해야하는 프로젝트가 있습니다. 내 GNUmakefile '은 찾지은 다음과 같습니다한 번에 여러 대상에 대한 레시피 실행
는$(SOURCES) = file1.a file2.a file3.a ... fileN.a
$(TARGETS) = $(SOURCES:.a=.b)
%.b: %.a
build-tool $?
all: $(TARGETS)
이 메이크 속도가 느립니다 각 대상에 대한 build-tool
을 실행합니다. 그래서 업데이트 된 전제 조건의 목록으로 build-tool
을 한 번만 실행하기를 원합니다.
나는 다음과 같은 규칙을 추가하려고 :
$(TARGETS): $(SOURCES)
을 그리고 그런 첫번째 빌드에 도움이 :
$ make all
build-tool file1.a file2.a ... fileN.a
그러나 이후에 build-tool
가 여러 번 내가 가지고있는 많은 목표 실행 된 빌드 :
$ touch file1.a && make all
build-tool file1.a
build-tool file1.a
...
build-tool file1.a
반면에 build-tool [email protected]
으로 제조법을 변경하면 빌드 도구가 한 번 실행됩니다. 모든 경우의 모든 전제 조건은 바람직하지 않습니다.
모든 대상에 대해 한 번만 레시피를 실행할 수있는 방법이 있습니까? 즉, 첫 번째 빌드의 모든 전제 조건과 이후 빌드에서만 수정됩니다.
그것은 내 문제를 해결,하지만 난 할 수 있습니다 다른 레벨을해야하는 경우처럼 당신이 뭔가를 할 수 있습니다
ETA을 :
예를 들어, 다음과 같이 작동합니다 더 복잡한 경우에 그것을 사용하는 방법을 찾아 내지 마십시오. 예를 들어 위에서 언급 한 것과 같은 방식으로'.c' 파일을'build-tools2' 파일로'.b' 파일로 만들 필요가있는 경우입니다. – insanedeveloper
죄송합니다. "더 복잡한 경우"를 정확히 설명하기 전까지는 귀하의 질문에 대답하기가 어렵습니다. 그래서 어디서나 당신이 묻는 질문에 대한 답을 얻습니다. 당신이 묻고 싶은 질문에 대한 대답이 아닙니다. 'build-tool2'가 어떻게 작동하는지에 대한 자세한 내용이 없으면 나는 대답에 대한 가능한 해결책을 추가했다. – MadScientist
누군가가'$ (TARGETS)'중 하나를 만지면 작동하지 않습니다. 이 파일이 수정되거나 삭제되면 Make는 탐지하지 않습니다. – nowox