Pregunta

scons utiliza hashes MD5 en vez de presentar tiempos mod para determinar si una dependencia tiene que ser construido.

Quiero que este es el comportamiento predeterminado. Pero ¿hay alguna manera de obligarlo a asumir un determinado archivo no está actualizado (el equivalente de "toque"), además de editar el archivo para que sea diferente?

editar caso de uso:

archivo binario F se utiliza para crear otro archivo G usando una herramienta X. Por alguna razón archivo G ha cambiado (que se corrompe, o que lo editó) o la herramienta X ha cambiado, y que desea volver a crear el archivo G y todo aguas abajo de la misma.

editar Esto es para uso ocasional. No quiero que esto suceda siempre, sólo los pocos momentos en los que pido. También Puede que no sepa el archivo en particular antes de tiempo. Por esta razón no quiero modificar los archivos SConscript / SConstruct para construir un archivo en particular. Lo que me gustaría es hacer esto en un símbolo del sistema:

scons {something to specify file foobar.h}

y que obligaría a scons para construir todos los archivos en función de foobar.h, mientras que sólo escribir scons haría la acumulación regular usando hashes MD5 de comprobación de dependencias. No me importa la edición de archivos de SConscript / SConstruct antes de tiempo para permitir que este (Decididor costumbre, supongo), si hay una manera de hacerlo que no aumenta significativamente los tiempos de construcción.

¿Fue útil?

Solución

¿Ha tenido un vistazo a la opción de --interactive Scons, no se puede limpiar y construir objetivos específicos.

página del manual que describe este.

Otros consejos

No creo que hay una manera de hacerlo directamente eso. Si el archivo de origen en cuestión tiene una salida obvia, como test.o creado a partir de test.c, a continuación, retirar test.o obligaría a una recompilación del archivo de origen.

Si por el contrario desea tocar test.h que se incluye desde múltiples archivos de origen diferentes, puede ser mejor hacer una limpieza de todo el proyecto para garantizar que todo se reconstruye.

Una vez dicho esto, es posible que desee leer sobre la función Decider() que le permite elegir cómo serán tratadas las dependencias de archivos. Incluso se puede elegir una función decisivo a medida para determinados archivos en su proyecto, por lo que si usted tiene algún archivo de cabecera global que desea ser capaz de touch y reconstruir, se puede hacer eso.

Actualización:. Para responder a su última pregunta, simplemente eliminar el archivo G. Scons recreará desde F ejecutando X en la próxima vez que genere

se crea un archivo de destino maniquí con una fecha completa hasta el final a la hora minuto y segundo. Entonces tengo los otros pasos dependen de este archivo objetivo simulado. Esto cambiará el valor MD5 cada vez que el paso de generación vuelve a compilar y hacer que los pasos posteriores que recompilar. Como alternativa se puede quitar el objetivo simulado y que también caerá en cascada una re-compilación.

En lo personal, me parece muy útil, ya que no puedo predecir toda la salida de cada paso en mi flujo de acumulación EDA. Tampoco quiero tratar de predecir todos los resultados de cada paso de generación debido a los costes de mantenimiento.

Estoy seguro de que la función Decididor (), como Greg ha mencionado, es más scons-como, pero yo personalmente les gusta tener los archivos de marca de tiempo.

En el archivo SConstruct extraer el nodo que representa el archivo. Después de esto, usted debe ser capaz de utilizar el Node.always_build (verdadero) para asegurarse de que está construido, creo que esto obligará a sus dependientes que ser reconstruido también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top