Как заставить g++ искать файлы заголовков в определенном каталоге?
у меня есть проект (Библиотека), который подразделяется на несколько директорий с кодом в них. Я хотел бы, чтобы G++ искал файлы заголовков в корневом каталоге проекта, поэтому я могу избежать разных путей включения для одних и тех же файлов заголовков в нескольких исходных файлах.
в основном root/
каталог имеет подкаталоги A/
, B/
и C/
, которые .hpp
и .cpp
файлы внутри. Если какой-то исходный файл в A хотел включить file.hpp
, который был в B, он должен был бы сделать это так:#include "../B/file.hpp"
. То же самое для другого исходного файла, который был в C. Но, если у самого были подкаталоги с файлами, которые нуждались file.hpp
, то это было бы непоследовательно и вызвало бы ошибки, если бы я решил переместить файлы (потому что путь включения будет "../../B/file.hpp"
).
кроме того, это должно работать и с другими проектами, которые находятся за пределами root/
. Я уже знаю, что есть возможность вручную скопировать все мои файлы заголовков в поиск по умолчанию каталог, но я хотел бы сделать это так, как я описал.
Edit: все программы, использующие библиотеку, должны компилироваться только с помощью g++ prog.cpp lib.a -o prog
. Это значит постоянно установка пути включения для g++!
4 ответов
A / code.cpp
#include <B/file.hpp>
a / a / code2.cpp
#include <B/file.hpp>
компиляция с использованием:
g++ -I /your/source/root /your/source/root/A/code.cpp
g++ -I /your/source/root /your/source/root/A/a/code2.cpp
Edit:
вы можете использовать переменные среды для изменения пути g++ ищет заголовочные файлы. Из man page:
некоторые дополнительные переменные среды влияют на поведение препроцессор.
CPATH C_INCLUDE_PATH CPLUS_INCLUDE_PATH OBJC_INCLUDE_PATH
значение каждой переменной-это список каталогов, разделенных специальным символом, похожим на PATH, в котором искать заголовок файлы. Специальный символ "PATH_SEPARATOR" зависит от цели и определяется во время сборки GCC. Для целей на базе Microsoft Windows является точкой с запятой, и почти для всех других целей это двоеточие.
CPATH задает список каталогов для поиска, как если бы он был указан с помощью-I, но после любых путей, заданных с помощью-I командная строка. Этот переменная окружения используется независимо от языка предварительно обрабатывать.
остальные переменные среды применяются только при предварительной обработке указанного языка. Каждый задает список каталогов поиск, как если бы указано с -isystem, но после любых путей, заданных с-iSystem параметры в командной строке.
во всех этих переменных пустой элемент указывает компилятору искать его текущий рабочий каталог. Пустые элементы могут появляются в начале или конец путь. Например, если значение CPATH": / special / include", это имеет тот же эффект, что и-I. - I / special / include.
есть много способов изменить переменную среды. В командной строке можно сделать так:
$ export CPATH=/your/source/root
$ g++ /your/source/root/A/code.cpp
$ g++ /your/source/root/A/a/code2.cpp
вы можете, конечно, добавить это в свой Makefile и т. д.
gcc -I/path -L/path
-I /path
путь к ССЗ найдете .H-файлы по этому пути-L /path
содержащую файлы библиотек,.a
,.s
o
заголовки, включенные в #include , будут искать во всех каталогах по умолчанию, но вы также можете добавить свое собственное местоположение в путь поиска с помощью-I командной строки arg.
Я видел ваше редактирование, вы можете установить свои заголовки в местах по умолчанию обычно
/usr/local/include
libdir/gcc/target/version/include
/usr/target/include
/usr/include
подтвердите с помощью документов компилятора.
Это просто, используйте опцию "- B", чтобы добавить .H-файлы' dir для поиска пути.
например. g++ - B / header_file.h ваш.cpp-o bin / your_command