Esto es una continuación de mi pregunta anterior: SO 4403861 porque las soluciones sugeridas rompieron las dependencias, haciendo inútil el archivo MAKE. No puedo entender por qué.dependiendo de los directorios en make
estoy usando GNU Make 3.82 Tengo una regla que funciona si se ha creado el directorio obj:
objdir:=../obj
$(objdir)/%.o: %.C
$(COMPILE) -MM -MT$(objdir)/$(notdir [email protected]) $< -o $(DEPDIR)/$(notdir $(basename $<).d)
$(COMPILE) -o $(objdir)/$(notdir [email protected]) -c $<
Sin embargo, si el directorio obj no está allí, hacer que falle. Yo quería hacer para crear automáticamente ../obj en la demanda, por lo que añade lo que pensaba que era muy simple:
$(objdir)/%.o: %.C $(objdir)
$(COMPILE) -MM -MT$(objdir)/$(notdir [email protected]) $< -o $(DEPDIR)/$(notdir $(basename $<).d)
$(COMPILE) -o $(objdir)/$(notdir [email protected]) -c $<
$(objdir):
if [ ! -d $(objdir) ] ; then mkdir $(objdir) ; fi
Cuando lo hago, hago siempre fuerza la compilación, cada vez. ¿Por qué? ¿El mkdir no debería suceder a menos que no haya directorio? ¿Por qué las dependencias son destruidas por este simple cambio?
Como les comentaba en respuesta a su pregunta/comentario a mi respuesta en 4.403.861: _ "La regla dice que el archivo de objeto depende del directorio de objetos - lo que significa que si el índice de objetos ha cambiado desde el archivo de objeto fue construido por última vez (por ejemplo, porque compiló otro archivo), entonces su archivo necesita ser reconstruido.Su objetivo de compilación general depende del directorio de objetos existente; los archivos de objetos individuales no necesitan reconstrucción simplemente porque el directorio cambió. "_ –