Как заставить GCC искать заголовки в каталоге перед каталогом текущего исходного файла? - PullRequest
12 голосов
/ 02 июля 2010

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

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

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

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

1 Ответ

10 голосов
/ 02 июля 2010

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

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

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

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

...