makefile 변수의 최상위 디렉토리 부분을 가져오는 가장 간단한 코드는 무엇입니까? 예:
BUILD_DIR = dir/subdir/.../sub-a-dub-dir
distclean:
rm -rf <some code which evaluates to "dir" from $(BUILD_DIR)>
추신: 내 말은 아니지만 $(dir $(dir $(BUILD_DIR)))
첫 번째 디렉토리 부분에서 항목을 가져옵니다.어느변하기 쉬운.
답변1
디렉토리의 첫 번째 구성 요소를 의미합니까? 그렇다면 경로를 구성 요소 목록으로 변환하고 첫 번째 구성 요소를 추출합니다. 나는 당신이 GNU make를 사용하고 있고 공백이 포함된 파일 이름이 무사히 빠져나가기를 기대하는 것과 같은 미친 짓을 하고 있지 않다고 가정합니다. 절대 경로를 사용하지 마십시오.
override BUILD_DIR = dir/subdir/.../sub-a-dub-dir
distclean:
rm -rf $(firstword $(subst /, ,$(BUILD_DIR)))
BUILD_DIR
누군가 실수로 전달하고 실수로 무언가를 삭제하는 것을 방지하기 위해 사용자가 명령줄에서 전달할 수 있는 모든 내용을 재정의 합니다 .
답변2
BUILD_DIR이 "/"로 시작하지 않는다고 확신하는 경우:
rootdir=$( echo $BUILD_DIR | cut -d/ -f1 )
그렇지 않으면 "/"로 시작하는 경로를 고려할 수 있습니다.
if [[ $BUILD_DIR =~ "^/" ]]; then
rootdir=$( echo $BUILD_DIR | cut -d/ -f1,2 )
else
rootdir=$( echo $BUILD_DIR | cut -d/ -f1 )
fi
echo $rootdir
아니면 "/"로 시작하는 경로를 무시하는 것이 더 나을 수도 있습니다.