2012-07-20 4 views
3

소스 파일이 있는지 확인하고 싶습니다. 그래서 내 gnu 메이크 파일에 TO_DIR =/dev/null을 할당합니다. 일반적인 경우에 대한null 디렉토리에 여러 파일 복사

APPS=a b c d 
install: 
    cp $(APPS) $(TO_DIR) 
  • , 내가 (단지 확인 파일을 복사 존재), 내가 '실행하겠습니다 테스트 케이스에 대한
  • 'TO_DIR는 = ~/bin에 설치하게 '실행하겠습니다 TO_DIR =/dev/null make install '

/dev/null은 의사 디렉토리가 아니기 때문에 실패합니다. 더 좋은 해결책이 있습니까? 당신은 다른 작업을 수행 할 수

답변

2

이 같은 목표를합니다

check: 
    file $(APPS) > /dev/null 

file 유틸리티는 모든 파일의 존재를 확인하고이 중 하나가 존재하지 않는 경우 실패합니다. 출력이 작업에 대한 과도한 그래서 우리 관이

/dev/null하려면이 같은 검사를 실행합니다 :

make check 
+0

tks이지만 추가 작성하는 이름은 원하지 않습니다. 나는 많은 서브 디렉토리를 가지고 있으며 그것들은 makefile을 포함하고있다. 나는 모든 서브 디렉토리의 makefile을 호출하고 싶다. –

+1

아마도'/ tmp'를 덤프 디렉토리로 사용할 수 있습니다. 파일을 완전하고 일시적으로 없애기 위해 nullfs (https://github.com/xrgtn/nullfs)와 같은 것을 퓨즈 마운트 할 수 있습니다. – spacediver

+0

감사합니다. nullfs는 내가 원하는 솔루션입니다. –

2

여기에 바로 가지 TO_DIR

의 값에 따라 spacediver의 대답의 수정입니다
install: 
    [ -z "$(TO_DIR)" ] && make install_for_real || make check 

install_for_real: 
    cp $(APPS) $(TO_DIR) 

check: 
    file $(APPS) > /dev/null 

make install 
make install TO_DIR= 
중 하나에 대한 검사를해야한다

하지만 실제 설치는

make install TO_DIR=/path/to/installation/dir 
+0

덕분에 다른 스마트 방법을 제공합니다. 그건 nullfs의 설치를 방지합니다. –

+1

누락 된 파일'file $ (APPS)>/dev/null ||을 표시하려면 이것을 사용하십시오. file $ (APPS)'와 같이'grep '을 사용하려고 시도했지만, 다른 문제가 발생합니다. –

관련 문제