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: Não quero dizer $(dir $(dir $(BUILD_DIR)))
, mas algo que obtém a primeira parte do diretório de qualquer valor variável.
dirname /tmp/foo/bar
vai dar/tmp
oudirname foo/bar/baz
vai darfoo
/
? Você garante que o argumento é um caminho relativo? Você está assumindo o GNU make?Respostas:
Você quer dizer o primeiro componente do diretório? Nesse caso, transforme o caminho em uma lista de componentes e extraia o primeiro componente. Suponho que você esteja usando o GNU make e não esteja fazendo algo insano, como esperar que os nomes de arquivos com espaço em branco passem ilesos. Não tente isso com um caminho absoluto.
Eu
BUILD_DIR
substituo o que o usuário possa ter passado na linha de comando, para evitar que alguém a passe acidentalmente e que algo indesejado seja excluído.fonte
BUILD_DIR
deveria ser uma variável interna, mas você está certo, ainda há a possibilidade de alguém definir algo perigoso. Então, aceitar esta resposta, com a ressalva de que a solução não deve ser usado :)override BUILD_DIR = …
Se você tem certeza de que BUILD_DIR nunca começará com um '/':
Caso contrário, pode ser necessário considerar os caminhos que começam com '/':
Ou talvez seja melhor ignorar qualquer caminho que comece com '/'.
fonte
rm -rf
posteriormente. Definitivamente, eu checariarootdir
novamente a resposta que o script pode transmitir, para que você não acabe com um erro de sintaxe ao fornecer o scriptrm -rf /
.