Запутался в #include для отдельных каталогов в C ++ с использованием Unix

0

Смутно о #include для отдельных каталогов в C++ с использованием Unix

  • 2
    Установите правильный путь включения и #include <library / header>
  • 0
    «Я не знаю, как я могу это проверить или выяснить». Посмотрите на make-файл, используемый для сборки.
Показать ещё 2 комментария
Теги:
header
c-preprocessor

2 ответа

1

На ваш вопрос частично ответили, допустим, вы используете 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 без редактирования источников).

-1

как видно из "PP/linear.h", это означает, что мы находимся в "ws/A/me/inc", поэтому с.. мы переходим к "мне" с.. /.. идем к "A" с.. /../.. мы переходим к "ws", тогда "../../../B/inc/Normal/geometry.h" должно привести нас в нужную позицию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню