Esto es solo un segmento de un archivo MAKE. No entiendo muy bien lo que está pasando.Varios puntos y el mismo signo en el archivo MAKE (necesita explicación)
OBJS = $(SRCS:$(SRC)/%.cpp=$(OBJ)/%.o)
$(OBJS):$(OBJ)/%.o: $(SRC)/%.cpp | print-opts
$(cc-command)
Todo lo que entiendo es compilar estas líneas .cpp archivos en .o, después de 'imprimir-TPO', con 'CC-comando'. Pero no entiendo la semántica.
Si amplío la macro de 'OBJS', esta línea debería ser:
$(SRCS:$(SRC)/%.cpp=$(OBJ)/%.o) : $(OBJ)/%.o: $(SRC)/%.cpp | print-opts
$(cc-command)
Para mí, parece que en '$ (MLRS:. $ (SRC) /% CPP = $ (OBJ) /%. o) ', afirma que todos los .cpp en $ (SRC) llegarían a .o en $ (OBJ), pero esto dependería de $ (OBJ) /%. o, que depende de $ (SRC) /% .cpp. Esto no tiene sentido ...
No entiendo cuál es el significado del signo igual aquí, y lo que significan dos puntos.
Muchas gracias. Las referencias al manual gnu 'make' son muy útiles también. (Había revisado el manual anteriormente, pero no pude encontrar la información que necesitaba) – qinsoon
Tad confundido por la referencia de sustitución. Entonces, si tengo 'main.c', lo insertará en el directorio de archivos del objeto y simplemente cambiará la extensión del archivo a' .o'. Esto conserva el contenido del archivo y simplemente cambia la extensión. Esto establece los nombres de todos los archivos de objeto con los que terminamos. Luego usamos la lista de nombres como un objetivo y compilamos los archivos de objetos, y sobrescribimos los archivos con el nuevo archivo objeto que acabamos de compilar. ¿Correcto? – Ungeheuer
@Ungeheuer: No, la referencia de sustitución no hace nada en absoluto a los archivos, simplemente transforma las variables. Convierte "source_dir/main.cpp" en "object_dir/main.o"; esos son * nombres de archivo *, no * archivos *. Una vez que tenemos la cadena "dir_objeto/main.o", podemos pasarla a la regla de patrón, que sabe cómo construir un archivo de ese nombre. – Beta