Я использую предварительно скомпилированные заголовки GCC в своем проекте со сборкой мультиархитектуры, но вещи ломаются, когда я пытаюсь поместить его в каталог, отличающийся от каталога текущего источника.
Файл включен с двойными кавычками, и он работает, если я изменяю его на угловые скобки, но проблема состоит в том, что у меня есть много других проектов, которые используют то же предварительно скомпилированное название заголовка, так изменение всех их к угловым скобкам не желательно, поскольку он может создать неоднозначность о который заголовок включать в сборку Visual Studio тех же файлов.
GCC ищет, текущий каталог для двойной кавычки включает перед его путем поиска. Я могу работать вокруг этого использование -I-
опция (например. -Ipch_dir.i686 -I-
), так, чтобы предварительно скомпилированный каталог заголовков искался перед текущим каталогом, но эта опция удерживается от использования. GCC предлагает, чтобы я использовал -iquote
, но это не имеет того же эффекта как -I-
.
Таким образом, вопрос состоит в том, как я делаю, он работать, не изменяя все предварительно скомпилированные заголовки включает директивы в угловые скобки и использование переключателя GCC устаревшего?
Я нашел обходной путь.
Создайте предварительно скомпилированный заголовок под другим именем. Например, заголовок - ah
, исходный предварительно скомпилированный заголовок - pchdir.i686 / ahgch
, построить его как
gcc ah -o pchdir.i686 / a-precompiled.h .gch
Используйте переключатель GCC -include
, чтобы убедиться, что переименованный заголовок включен перед чем-либо еще (даже перед исходным a.h
), например
gcc -Ipchdir.i686 -include a-precompiled.h <другие аргументы> <источник>
Окончательный порядок включения в исходный файл будет следующим: a-precompiled.h.gch
, a.h
, что я проверил с помощью -H
. Исходный заголовок включен, но фактически не обрабатывается, потому что предварительно скомпилированный заголовок имеет идентичные средства включения (также проверяется путем вставки #error
в исходный заголовок после построения предварительно скомпилированного).