De acuerdo con lo que he leído sobre los archivos MAKE, un objetivo falso es cualquier objetivo que no se corresponda con un nombre de archivo real. Mi intuición dice que un directorio como objetivo se trataría igual que un archivo.En un archivo MAKE, ¿el nombre de un directorio es un objetivo falso o un objetivo "real"?
¿Por qué es esto importante? Tengo un directorio como objetivo en mi archivo MAKE. cuando lo tengo como un requisito previo para mi ejecutable principal, ese ejecutable siempre se realiza, independientemente de si todo está actualizado. Si lo saco como un requisito previo, mi archivo MAKE es lo suficientemente inteligente como para saber cuándo hay que construir cosas, pero tengo el problema de no saber si es necesario crear el directorio. De acuerdo con lo que he leído sobre make, cualquier objetivo falso no es bueno como prerrequisito porque make no sabe si está actualizado, por lo que siempre reconstruirá el objetivo asociado. Aquí hay un extracto de mi archivo MAKE.
$(EXEC_WITH_PATH): ${OBJ_DIR} $(DPEND) $(OBJS)
@echo "--------------------------------------------";
@echo "$(THIS_DIR) $(MACHINE)";
@echo "Linking Shared Library";
@echo "ar -rc $(EXEC_WITH_PATH) INSERT::{OBJS}";
ar -rc $(EXEC_WITH_PATH) $(OBJS);
@echo "--------------------------------------------";
# Make dirs for object code and links
${OBJ_DIR} :
@if [ ! -d ${OBJ_DIR} ]; then \
mkdir ${OBJ_DIR}; \
fi;
lo tanto, en este caso, es ${OBJ_DIR}
, un nombre de directorio, un objetivo falso o no?
de todos modos para resolver su problema, puede tener un comando mkdir precedido por un "-" de modo que haga ignorar el valor de retorno. – siukurnin
@siukurnin: No, debe usar 'mkdir -p', para que tenga éxito si el directorio ya existe, pero falla correctamente si no se puede crear el directorio. – Cascabel
Por lo que vale, creo que el problema es que el directorio es un requisito previo para el archivo que está en ese directorio. Por lo tanto, en la mayoría de los casos, el directorio de requisitos previos y el destino tienen la misma marca de tiempo, lo que hace que el objetivo se haga cada vez. – Chance