Поиск обходного пути для конфликта имени файла с заголовочным файлом Visual C++

Наш код включает vector, который включает memory, который включает intrin.h от Microsoft, но у нас есть собственный intrin.h на пути включения. Следовательно, memory подхватывает наш intrin.h вместо системного и не компилируется.

И наша intrin.h, и Microsoft существуют уже много лет, но раньше у нас никогда не было конфликтов - VS 2010 вводит новую зависимость. Перемещение или переименование нашего intrin.h было бы мучением, и я бы предпочел этого избежать.

Можно ли каким-то образом убедить MSVC заглянуть в каталог system include перед нашим собственным? Редактирование memory, чтобы сказать:

#include "intrin.h"

скорее, чем

#include <intrin.h>

работает, но я не хочу, чтобы всей команде приходилось изменять свои среды Visual Studio (и сохранять их измененными перед пакетами обновлений и т. д.)

Любой другой способ обойти это?


person RichieHindle    schedule 10.06.2009    source источник


Ответы (1)


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

person Community    schedule 10.06.2009
comment
Похоже, это сломает его код, которому нужна его копия intrin.h. - person sean e; 10.06.2009
comment
@Neil: Хорошая идея, но VS не позволяет мне это сделать! Если я добавлю $(VCInstallDir)include к пути включения, тогда VS изменит его на .\$(VCInstallDir)include, и произойдет сбой. Даже если я укажу полный путь (что немного неприятно), он изменит его на относительный путь, который затем завершится ошибкой, когда кто-то извлечет проект в другую глубину каталога. Грр! VS слишком умен для своего же блага! - person RichieHindle; 10.06.2009
comment
@sean: Нет, это сработает, потому что одному коду нужен один intrin.h, а другому — другой, но ни одному коду не нужны оба. Если у меня есть способ контролировать, какой из них будет выбран, я могу выборочно применить его к коду, который в этом нуждается. - person RichieHindle; 10.06.2009
comment
Возможно, вы захотите нажать social.msdn.microsoft.com/Forums/en- US/vcprerelease/threads и посмотрите, наблюдается ли ожидаемое поведение — как для исходной проблемы, так и для относительной проблемы пути включения. - person sean e; 10.06.2009
comment
Ага! Предварительно добавив $(VCInstallDir)include; к тексту пути включения в свойствах проекта, а не с помощью команды «редактировать» для его редактирования, это работает. Спасибо, Нил! - person RichieHindle; 10.06.2009
comment
К сожалению, подробности в ответе не дают никому реального ответа. Рад видеть, что кто-то понял это, но вопрос и ответ не очень полезны как часть архива. - person shawn1874; 15.09.2016