Pergunta

Assim, parece haver este problema com a função do GNU make $ (wildcard) manter um Open Directory no Windows. Ver (unasnwered) post " make está segurando um diretório aberto ". O Google não fornecem muita informação sobre o tema.

Em suma: o Makefile usa a função $ (wildcard) em algum momento, e mantém um diretório aberto, que normalmente evita que o "make clean" regra para fazer o seu trabalho corretamente. Re-executar "make clean" uma segunda vez geralmente resolve-lo.

Eu estou usando o GNU make versão 3.81 sob um padrão DOS-Box. O autor do post relacionado acima está usando Cygwin.

Alguém já encontrou uma solução para isso?

Foi útil?

Solução 2

Eu fiz encontrar um Solução para o problema, que, pelo menos, deixa-me trabalhar em paz.

O problema era que a função $(wildcard) foi utilizado para coletar os arquivos fontes. Minha regra limpo, no entanto, só apaga um diretório - não há necessidade para a coleta de tomar por favor. Então eu basicamente colocar a parte do Makefile que as necessidades para recolher as fontes de arquivos em uma declaração condicional:

# The clean rule is always parsed
clean:
    rm -rf $(OUTPUT_DIRECTORY)

# The compile rule is only interpreted if we did not invoke 'make clean'. We
# can test the value of $(MAKECMDGOALS) for that:
ifeq ($(filter $(MAKECMDGOALS),clean),)

SOURCE_FILES := $(wildcard ...)

compile:
    g++ $(SOURCE_FILES) ...

endif

Outras dicas

soa como um vazamento de descritor de arquivo, tudo bem -. Inofensivos para processos de muito de curta duração (como fazer) em UNIX, mas um PITA direito no Windows

Como este é supostamente um bug no make, em oposição a um problema com a sua utilização, deve ser abordada pela primeira vez por validar que ainda existe quando construído a partir de fonte sobre a mais nova versão do autor, e depois por apresentação de uma relatório de bug com o projeto make GNU (ou com qualquer distribuidor com quem você tem um contrato de suporte adequado ), ou mergulhar na fonte e tentar corrigi-lo sozinho.

Não faria mal para tentar reproduzir em Linux - verificando se há vazamentos do descritor de arquivo são muito mais fáceis aqui, como se pode apenas olhar para /proc/self/fd (ou, para uma criança de marca, /proc/$PPID/fd) para as coisas que não fazer pertencem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top