Смутно о #include
для отдельных каталогов в C++ с использованием Unix
На ваш вопрос частично ответили, допустим, вы используете GCC (такое же сравнение для Visual Studio):
#include <file>
Этот вариант используется для файлов заголовков системы. Он ищет файл с именем file в стандартном списке системных каталогов. Вы можете добавить каталоги в этот список с-I
опции-I
(см. Invocation).#include "file"
Этот вариант используется для файлов заголовков вашей собственной программы. Он ищет файл с именем file сначала в каталоге, содержащем текущий файл, затем в каталогах цитат, а затем в тех же каталогах, что и для<file>
. Вы можете добавить каталоги в список каталогов цитат с-Iquote
.
Поэтому, когда вы хотите включить geometry.h
с помощью #include <>
вам просто нужно вызывать gcc
с дополнительным аргументом -I
, вам просто нужно решить, как "глубоко" вы хотите:
gcc -I #include
/abs/path/ws/B/inc/Normal <geometry.h>
/abs/path/ws/B/inc <Normal/geometry.h>
/abs/path/ws/B <inc/Normal/geometry.h>
/abs/path/ws <B/inc/Normal/geometry.h>
/abs/path <ws/B/inc/Normal/geometry.h>
И если вы хотите использовать #include ""
вы тоже можете это сделать:
Предположим, вы находитесь в /abs/path/ws/A/inc/your_header.h
и хотите включить /abs/path/ws/B/inc/Normal/geometry.h
:
#include path
"geometry.h" /abs/path/ws/A/inc/geometry.h
"../geometry.h" /abs/path/ws/A/geometry.h
"../../geometry.h" /abs/path/ws/geometry.h
"../../B/geometry.h" /abs/path/ws/B/geometry.h
"../../B/inc/geometry.h" /abs/path/ws/B/inc/geometry.h
"../../B/inc/Normal/geometry.h" /abs/path/ws/B/inc/Normal/geometry.h
Если это не сработает, вы, вероятно, находитесь в другой папке или где-то там.
Я бы лично пошел с первым решением (возможно, вы захотите позже использовать ваши библиотеки "в системе", и вам просто нужно изменить один заголовок -I
в make- -I
без редактирования источников).
как видно из "PP/linear.h", это означает, что мы находимся в "ws/A/me/inc", поэтому с.. мы переходим к "мне" с.. /.. идем к "A" с.. /../.. мы переходим к "ws", тогда "../../../B/inc/Normal/geometry.h" должно привести нас в нужную позицию.