makefile 변수에서 최상위 디렉터리 가져오기

makefile 변수에서 최상위 디렉터리 가져오기

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

아니면 "/"로 시작하는 경로를 무시하는 것이 더 나을 수도 있습니다.

관련 정보