Как заставить GCC искать заголовки в каталоге перед каталогом текущего исходного файла?

Я использую предварительно скомпилированные заголовки GCC в своем проекте со сборкой мультиархитектуры, но вещи ломаются, когда я пытаюсь поместить его в каталог, отличающийся от каталога текущего источника.

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

GCC ищет, текущий каталог для двойной кавычки включает перед его путем поиска. Я могу работать вокруг этого использование -I- опция (например. -Ipch_dir.i686 -I-), так, чтобы предварительно скомпилированный каталог заголовков искался перед текущим каталогом, но эта опция удерживается от использования. GCC предлагает, чтобы я использовал -iquote, но это не имеет того же эффекта как -I-.

Таким образом, вопрос состоит в том, как я делаю, он работать, не изменяя все предварительно скомпилированные заголовки включает директивы в угловые скобки и использование переключателя GCC устаревшего?

12
задан Alex B 2 July 2010 в 00:28
поделиться

1 ответ

Я нашел обходной путь.

  1. Создайте предварительно скомпилированный заголовок под другим именем. Например, заголовок - ah , исходный предварительно скомпилированный заголовок - pchdir.i686 / ahgch , построить его как

     gcc ah -o pchdir.i686 / a-precompiled.h .gch
    
  2. Используйте переключатель GCC -include , чтобы убедиться, что переименованный заголовок включен перед чем-либо еще (даже перед исходным a.h ), например

     gcc -Ipchdir.i686 -include a-precompiled.h <другие аргументы> <источник>
    
  3. Окончательный порядок включения в исходный файл будет следующим: a-precompiled.h.gch , a.h , что я проверил с помощью -H . Исходный заголовок включен, но фактически не обрабатывается, потому что предварительно скомпилированный заголовок имеет идентичные средства включения (также проверяется путем вставки #error в исходный заголовок после построения предварительно скомпилированного).

10
ответ дан 2 December 2019 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: