¿Es ineficiente tener vínculos simbólicos con vínculos simbólicos?

¿Es ineficiente tener vínculos simbólicos con vínculos simbólicos?

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.

información relacionada