g ++ -Я не работает в указанном порядке

0

Я запускаю g++ в системе Linux, где мои стабильные файлы заголовков существуют в директории /inc только для чтения, и одна из них, в которой я работаю, находится в /inctest. В результате этого в обоих каталогах может существовать одно и то же имя файла. Я хочу иметь возможность сохранить его таким образом, чтобы я всегда включал любые заголовки, присутствующие в /inctest, прежде чем они будут включены из /inc.

Проблема, с которой я сталкиваюсь, заключается в том, что в разное время она, как кажется, произвольно берет из любого из этих каталогов, а не всегда одну и ту же.

То есть, я запускаю g++ -I/inctest -I/inc a.cpp b.cpp...

и иногда я получаю один из /inc, иногда я получаю один из /inctest.

Является ли заказ, что мои -I параметры указаны неактуальными? На странице руководства для g++ говорится: "Заказ имеет значение, если вы используете несколько вариантов одного и того же типа".

Есть ли какой-либо другой способ, который я могу гарантировать всегда, включая заголовки из одного каталога перед их же именованным партнером в другом каталоге? Мне все равно нужно включить оба, поскольку /inc содержит все заголовки, над которыми я сейчас не работаю. Переименование тех, над которыми я работаю, не помогает, потому что тогда мне нужно изменить все мои #includes...

Редактирование: я немного углубился и заметил, что заголовок в /inc содержит другой заголовок, который существует как в /inc, так и в inctest. Я скопировал этот заголовок временно /inctest и, конечно же, включил его правильно. Это ошибка или правильное поведение?

Теги:
g++
header-files

1 ответ

1
Лучший ответ

Точные местоположения заголовков не указаны стандартом, и, как правило, компиляторы несколько слабы, чтобы документировать, что используется. -I обычно используются для заголовков, не найденных локально для файла, включая что-то. Тем не менее, при включении файла другой заголовок, выбранный файл обычно зависит от того, как файлы включаются:

  • При использовании #include <xxx> в заголовке -I флаги -I.
  • При использовании #include "xxx" в заголовке файл сначала просматривается в каталоге, где находится файл с директивой #include.

Конечно, проблема состоит в том, что, строго говоря, форма <xxx> зарезервирована для использования стандартной библиотеки.

  • 1
    gcc угрозы #include <xxx> и #include "xxx" как описано здесь: gcc.gnu.org/onlinedocs/cpp/Include-Syntax.html
  • 0
    Ключевой частью этого ответа для меня был «каталог, в котором находится файл с директивой #include». Я ошибочно предполагал, что каталог моего .cpp файла с исходным #include будет тем же начальным путем для любого вложенного в него #include, что не соответствует действительности.

Ещё вопросы

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