Obtém o diretório de nível superior da variável makefile

7

Qual é o código mais simples para obter a parte do diretório de nível superior de uma variável makefile? Exemplo:

BUILD_DIR = dir/subdir/.../sub-a-dub-dir
distclean:
        rm -rf <some code which evaluates to "dir" from $(BUILD_DIR)>

PS: Eu não quero dizer $(dir $(dir $(BUILD_DIR))) , mas algo que pega a primeira parte do diretório qualquer valor da variável.

    
por l0b0 09.11.2011 / 15:32

2 respostas

3

Você quer dizer o primeiro componente do diretório? Nesse caso, transforme o caminho em uma lista de componentes e extraia o primeiro componente. Eu suponho que você esteja usando o GNU make, e você não está fazendo algo insano como esperar que os nomes de arquivos com espaços em branco passem incólumes. Não tente isso com um caminho absoluto.

override BUILD_DIR = dir/subdir/.../sub-a-dub-dir
distclean:
        rm -rf $(firstword $(subst /, ,$(BUILD_DIR)))

Eu faço com que BUILD_DIR substitua qualquer coisa que o usuário possa ter passado na linha de comando, para evitar que alguém o passe acidentalmente e tenha algo não intencional excluído.

    
por 10.11.2011 / 02:11
0

Se você tem certeza de que o BUILD_DIR nunca vai começar com um '/':

rootdir=$( echo $BUILD_DIR | cut -d/ -f1 )

Caso contrário, talvez seja necessário considerar os caminhos que começam com '/':

if [[ $BUILD_DIR =~ "^/" ]]; then
        rootdir=$( echo $BUILD_DIR | cut -d/ -f1,2 )
else
        rootdir=$( echo $BUILD_DIR | cut -d/ -f1 )
fi

echo $rootdir

Ou talvez seja melhor ignorar qualquer caminho que comece com '/'.

    
por 09.11.2011 / 16:42

Tags