Evite "rm" no makefile

Evite "rm" no makefile

Tenho uma dúvida sobre uma linha em um Makefile. Tenho como objetivo "limpar" meu servidor de teste/teste instalado localmente. Atualmente está assim:

clean:
    rm -rf $(LOCAL_SERVER_PATH)/*

Contanto que a variável LOCAL_SERVER_PATHesteja definida e tenha a aparência /srv/www/htdocsou algo parecido com isto, está tudo bem. Mas... e se um usuário cometeu um erro e digitou incorretamente a definição da variável, ou alguma etapa de configuração deu errado e o Makefile foi criado, com uma definição errada.

Essencialmente, temo que, por engano, eu possa acabar com um un-defined $(LOCAL_SERVER_PATH), e meu alvo então renderia a:

clean:
    rm -rf /*

É possível refatorar meu Makefile para torná-lo mais robusto contra tais erros? Eu não quero acabar com um Makefile, que poderia acabar com toda a minha instalação do Linux (ou mesmo partes dela, já que meu usuário não é 'root').

Responder1

Conforme observado, verifique a variável para garantir que ela não esteja vazia:

clean:
    test -n "$(LOCAL_SERVER_PATH)" && rm -rf $(LOCAL_SERVER_PATH)/*

O mesmo idioma aparece em um grande número de arquivos de especificações RPM, onde parece que a BUILD_ROOTvariável não está definida. Dado que a sua substituição não está universalmente disponível (apesar dos comentários de há algum tempo atrásRe: [Embalagem do Fedora] Eliminar gradualmente o buildroot?), ainda pode ser encontrado aqui e ali.

Responder2

Em vez de usar o testcomando, você pode testar a variável no Makefile e se comportar de maneira diferente – por exemplo, mostrar um erro ao usuário, recusando-se, portanto, a executar o Makefile:

ifeq (,$(LOCAL_SERVER_PATH))
$(error Set LOCAL_SERVER_PATH variable to run this Makefile)
endif

informação relacionada