2014-04-11 2 views
0

나는 makefile을 가지고있다.경로의 모든 디렉토리 제거하기

DIRS = dir1 dir2 path/to/dir3 

all: 
    $(foreach DIR,$(DIRS), somecommand --source=$(SOURCEDIR)/$(DIR) --dest=$(DIR);) 

clean: 
    rm -rf $(DIRS) 

는 현재 clean 대상 dir1, dir2dir3 제거하지만 나는 그것이 dir1, dir2path을 제거하고 싶습니다.

clean: 
    $(foreach DIR,$(DIRS), rm -rf --parents $(DIR);) 

쉬운 방법이 있나요?

답변

1

rm에 사용할 수있는 플래그가 없습니다. 당신은 이런 식으로 뭔가를 할 수 :

clean: 
     $(foreach DIR,$(DIRS),rm -rf $(firstword $(subst /, ,$(DIR)));) 

당신이 항상 DIRs에있는 모든 경로의 첫 번째 디렉토리 아래의 모든 것을 삭제할 것인지 확신이 있다면

+0

(나에게 위험하게 들리 겠지만 ...) 실수로 절대 경로를 사용하는 경우에만 위험합니다. 그렇다면 다시 한번, 오타가 하나 밖에 없기 때문에, 결론적으로 - 오히려 위험합니다. – DanielGibbs

+1

첫 번째 단어가 찍히고 로컬 디렉토리에 표시되지 않으므로 절대 경로에는 문제가되지 않습니다. 위 코드는 현재 작업 디렉토리에 뿌리를 둔 경로에서만 작동합니다. 예를 들어'/ usr/bin '을'DIRS'에 추가하면 위의 명령은'rm -rf usr'을 실행합니다 (아마도'usr' 로컬 서브 디렉토리가없는 한 아마 작동하지 않을 것입니다). – MadScientist