Evite "rm" no makefile

3

Eu tenho uma pergunta sobre uma linha em um Makefile. Eu tenho um alvo para "limpar" o meu teste / servidor de teste instalado localmente. Atualmente, é assim:

clean:
    rm -rf $(LOCAL_SERVER_PATH)/*

Contanto que a variável LOCAL_SERVER_PATH esteja definida e pareça com /srv/www/htdocs ou algo assim, está tudo bem. Mas ... e se um usuário cometeu um erro e digitou incorretamente a definição de variável, ou alguma etapa de configuração foi rouge, e o Makefile é criado, com uma definição incorreta.

Essencialmente, temo que, por engano, eu possa acabar com um $(LOCAL_SERVER_PATH) não definido, e meu alvo então renderá para:

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 dele, já que o meu usuário não é 'root').

    
por Mathias Vonende 10.06.2015 / 17:54

1 resposta

3

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ção de RPM, onde parece que a variável BUILD_ROOT é desconhecida como não definida. Desde a sua substituição não está disponível universalmente (apesar dos comentários um tempo atrás em [Fedora-packaging] Phase out buildroot? ), ele ainda pode ser encontrado aqui e ali.

    
por 10.06.2015 / 22:57