Estamos configurando una serie de Makefiles donde queremos tener un directorio de inclusión a nivel de proyecto que tendrá enlaces simbólicos a archivos de inclusión a nivel de subproyecto. Muchos desarrolladores de subproyectos han optado por que sus archivos de inclusión también sean enlaces simbólicos a otro directorio donde se encuentra el software real.
Entonces mi pregunta es: ¿es ineficiente tener un enlace simbólico a otro archivo (por ejemplo, un encabezado C++ que puede incluirse docenas o más de veces durante una compilación)?
Árbol de directorios de ejemplo:
/project/include/
x_header1.h -> /project/src/csci_x/include/header1.h
x_header2.h -> /project/src/csci_x/include/header2.h
/project/src/csci_x/
include/
header1.h -> /project/src/csci_x/local_1/cxx/header1.h
header2.h -> /project/src/csci_x/local_2/cxx/header2.h
local_1/cxx/
module1.cpp
header1.h
local_2/cxx/
module2.cpp
header2.h
Respuesta1
No estoy seguro de lo que quieres decir con ineficiente, pero supongo que "no".
El kernel maneja todos los enlaces simbólicos, gnumake simplemente abre() y obtiene el archivo. A cualquier aplicación de nivel de usuario no le importa (bueno, rara vez le importa) si es un enlace simbólico o no, simplemente obtiene el archivo.
Los niveles adicionales de enlaces simbólicos por los que debe pasar el kernel son insignificantes en comparación con el tiempo para compilar y escribir/vaciar el caché en el disco.