Te podría dar explicaciones individuales de cada cosa pero el tema es largo y hay que verlo en su conjunto para entenderlo.
1. ifndef es directiva del preprocesador. Si no se ha definido el símbolo que le sigue se ejecutará todo lo que sigue hasta el endif.
define define el símbolo que le sigue. Esto son guardas de preprocesador e impiden que el archivo se incluya dos veces. En C está prohibido declarar dos veces el mismo objeto.
2. Cuándo un archivo incluye está entre comillas dobles el preprocesador lo buscará en la ruta actual del archivo.c. Si está entre ángulos < > el archivo es buscado en los directorios por defecto de las librerías.
Eso directivas del lenguaje makefile y es todo un mundo. Tu ejemplo dice:
Para construir p1 mira si p1.c y common.h han sido actualizados.
La línea que hay después, que es una sentencia bash, hará compilar p1.c