Estoy usando GNU make para construir un grupo de bibliotecas estáticas, usando las reglas implícitas de make para hacerlo. Estas reglas ejecutan el comando ar (1) para actualizar la biblioteca/archivo. La creación de perfiles ha demostrado que el tiempo de creación se reduciría si utilicé la opción -j para ejecutar trabajos paralelos durante la compilación.¿Cómo evito los problemas de simultaneidad cuando uso GNU make para versiones paralelas de archivos de almacenamiento?
Por desgracia, la GNU make manual tiene una sección http://www.gnu.org/software/make/manual/html_node/Archive-Pitfalls.html que más o menos dice que marca ofrece ningún guardia de concurrencia para el funcionamiento de AR (1), y por lo tanto se puede (y lo hace) corromper el archivo. El manual también se burla de que esto pueda solucionarse en el futuro.
Una solución para esto es usar http://code.google.com/p/ipcmd, que básicamente hace el bloqueo del semáforo antes de ejecutar un comando, serializando así los comandos ar (1) que crean el archivo. Esta solución particular no es buena para mí porque estoy construyendo con herramientas de compilación cruzada basadas en mingw en Windows.
¿Existe una solución más simple o mejor para este problema?
Creo que necesita ranlib el archivo, no los objs. Posiblemente también puede usar $^para los archivos objeto en las reglas. – user1143888