texto recursivo por ejemplos consola comando buscar archivos archivo directory g++ header-files include-path

directory - recursivo - ¿Cómo hacer que g++ busque archivos de cabecera en un directorio específico?



comando find ubuntu (4)

Tengo un proyecto (una biblioteca) que se subdivide en unos pocos directorios con código en ellos. Me gustaría que g ++ busque los archivos de encabezado en el directorio raíz del proyecto, de modo que pueda evitar diferentes rutas de inclusión para los mismos archivos de encabezado en varios archivos de origen.

Principalmente, el directorio root/ tiene subdirectorios A/ , B/ y C/ , todos los cuales tienen archivos .hpp y .cpp dentro. Si algún archivo fuente en A quisiera incluir file.hpp , que estaba en B, tendría que hacerlo así: #include "../B/file.hpp" . Lo mismo para otro archivo fuente que estaba en C. Pero, si A en sí tuviera subdirectorios con archivos que necesitaban file.hpp , sería inconsistente y causaría errores si decidiera mover archivos (porque la ruta de inclusión sería "../../B/file.hpp" ).

Además, esto debería funcionar desde otros proyectos, que residen fuera de la root/ . Ya sé que hay una opción para copiar manualmente todos mis archivos de encabezado en un directorio de búsqueda predeterminado, pero me gustaría hacerlo de la forma que describí.

Edición: todos los programas que usan la biblioteca deben compilarse solo con g++ prog.cpp lib.a -o prog . Eso significa establecer de forma permanente la ruta de inclusión para g ++!


A / code.cpp

#include <B/file.hpp>

A / a / code2.cpp

#include <B/file.hpp>

Compilar utilizando:

g++ -I /your/source/root /your/source/root/A/code.cpp g++ -I /your/source/root /your/source/root/A/a/code2.cpp

Editar:

Puede usar variables de entorno para cambiar la ruta en la que g ++ busca los archivos de encabezado. De la página del manual:

Algunas variables de entornos adicionales afectan el comportamiento del preprocesador.

CPATH C_INCLUDE_PATH CPLUS_INCLUDE_PATH OBJC_INCLUDE_PATH

El valor de cada variable es una lista de directorios separados por un carácter especial, como PATH, en el que se buscan archivos de encabezado. El carácter especial, "PATH_SEPARATOR", depende del objetivo y se determina en el momento de la compilación de GCC. Para los objetivos basados ​​en Microsoft Windows es un punto y coma, y ​​para casi todos los demás objetivos es un signo de dos puntos.

CPATH especifica una lista de directorios que se buscarán como si se hubiera especificado con -I, pero después de cualquier ruta dada con las opciones -I en la línea de comandos. Esta variable de entorno se utiliza independientemente del idioma que se esté preprocesando.

Las variables de entorno restantes se aplican solo al preprocesar el idioma particular indicado. Cada uno especifica una lista de directorios para buscar como se especifica con -isystem, pero después de cualquier ruta dada con las opciones de -isystem en la línea de comandos.

En todas estas variables, un elemento vacío le indica al compilador que busque su directorio de trabajo actual. Los elementos vacíos pueden aparecer al principio o al final de una ruta. Por ejemplo, si el valor de CPATH es ": / special / include", tiene el mismo efecto que -I. -I / especial / incluir.

Hay muchas maneras de cambiar una variable de entorno. En bash prompt puedes hacer esto:

$ export CPATH=/your/source/root $ g++ /your/source/root/A/code.cpp $ g++ /your/source/root/A/a/code2.cpp

Por supuesto, puede agregar esto en su Makefile, etc.


Se buscarán los encabezados incluidos con #include <> en todos los directorios predeterminados, pero también puede agregar su propia ubicación en la ruta de búsqueda con -I línea de comando arg.

Vi tu edición, podrías instalar tus encabezados en ubicaciones predeterminadas usualmente

/usr/local/include libdir/gcc/target/version/include /usr/target/include /usr/include

Confirmar con los documentos del compilador sin embargo.


es simple, use la opción "-B" para agregar el directorio de los archivos .h a la ruta de búsqueda.

Por ejemplo g ++ -B /header_file.h your.cpp -o bin / your_command


gcc -I/path -L/path

  • -I /path para incluir, gcc encontrará archivos .h en esta ruta

  • -L /path contiene archivos de biblioteca, .a , .s o