Pergunta

O SCONS usa hashes MD5 em vez de arquivar tempos de modificação para determinar se uma dependência precisa ser criada.

Eu quero que este seja o comportamento padrão. Mas existe alguma maneira de forçá -lo a assumir que um arquivo específico está desatualizado (o equivalente ao "toque"), além de editar o arquivo para torná -lo diferente?

editar: Caso de uso:

O arquivo binário F é usado para criar outro arquivo g usando uma ferramenta X. Por algum motivo, o arquivo G mudou (foi corrompido ou eu o editei) ou a ferramenta X mudou, e eu quero recriar o arquivo G e tudo mais a jusante dele .

editar: Isto é apenas para uso ocasional. Eu não quero que isso sempre aconteça, apenas aquelas poucas vezes quando peço. Também posso não conhecer o arquivo específico antes do tempo. Por esse motivo, não quero modificar os arquivos Sconscript/Sconstruct para criar um arquivo específico. O que eu gostaria é fazer isso em um prompt de comando:

scons {something to specify file foobar.h}

e isso forçaria o SCONS a construir todos os arquivos, dependendo do Foobar.h, enquanto apenas digitando scons Faria a construção regular usando hashes MD5 para verificação de dependência. Não me importo de editar os arquivos Sconscript/Sconstruct com antecedência para permitir isso (decisor personalizado, eu acho), se houver uma maneira de fazer isso, isso não aumenta significativamente os tempos de construção.

Foi útil?

Solução

Você já teve uma olhada na opção interativa de scons, lá você pode limpar e criar alvos específicos.

página de homem descrevendo isso.

Outras dicas

Eu não acho que exista uma maneira de fazer isso diretamente. Se o arquivo de origem em questão tiver uma saída óbvia, como test.o criado de test.c, depois removendo test.o forçaria um recompile do arquivo de origem.

Se você quiser tocar test.h Que está incluído em vários arquivos de origem diferentes, é melhor fazer uma limpeza de todo o projeto para garantir que tudo seja reconstruído.

Dito isto, você pode querer ler sobre o Decider() função o que permite escolher como as dependências de arquivo serão tratadas. Você pode até escolher uma função de decisão personalizada para arquivos específicos em seu projeto, por isso, se você tiver algum arquivo de cabeçalho global que gostaria de poder touch E reconstruir, você pode fazer isso.

ATUALIZAÇÃO: Para responder à sua última pergunta, basta excluir o arquivo G. Scons o recriará de F executando o X na próxima vez que você criar.

Eu crio um arquivo de destino dummy com uma data completa até a hora e o segundo. Então eu tenho as outras etapas depende desse arquivo de destino fictício. Isso alterará o valor do MD5 sempre que a etapa de construção recompensa e fará com que as etapas subsequentes recompilem. Como alternativa, você pode remover o alvo fictício e isso também em cascata em cascata.

Pessoalmente, acho isso muito útil porque não posso prever toda a saída de cada etapa do meu fluxo de construção da EDA. Também não quero tentar prever toda a saída de cada etapa de construção devido ao custo de manutenção.

Tenho certeza de que a função Decider (), como Greg mencionou, é mais parecido com o SCONS, mas eu pessoalmente gosto de ter os arquivos de registro de data e hora.

No seu arquivo Sconstruct Extrair o nó que representa seu arquivo. Depois disso, você poderá usar o Node.always_build (true) Para garantir que seja construído, acho que isso forçará seus dependentes a serem reconstruídos também.

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