Я меняю компьютеры (между двумя ноутбуками Windows 8.1) и только что загрузил проект, над которым я работаю из TFS. На одной машине она компилируется, с другой - нет и дает первую ошибку
error C1083: Cannot open include file: 'atlbase.h': No such file or directory
На обоих ноутбуках я запускаю Visual Studio Ultimate 2013. На первом ноутбуке я проверил, где он собирает atlbase.h
, и он находится в C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include
, то есть из каталога установки Visual Studio 2012. На новом компьютере у меня нет Visual Studio 2012, поэтому каталог C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include
не существует.
Другие люди имеют схожие проблемы (например, вопрос Рамилола), потому что они используют Visual Studio Express. Я использую Ultimate.
Это может быть проблема переменных окружения (как предложенная raj raj), но мои пути каталога include в VC++ Directories
являются $(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath)
по мере необходимости.
Мой общий вопрос: "Как я могу это исправить?" но мне также было бы интересно узнать, как я проверяю и устанавливаю значение $(VCInstallDir), поскольку C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include
имеет atlbase.h
в (поэтому я смущен тем, почему он не поднят).
========== РЕДАКТИРОВАНИЕ 1: Переписка ==========
Позвольте мне еще раз задать этот вопрос.
Я загрузил проект Visual Studio 2013 на новый ноутбук для сборки из TFS. Он не будет строить и дает ошибки, такие как error C1083: Cannot open include file: 'atlbase.h': No such file or directory
. Файл atlbase.h
присутствует на новом компьютере в каталоге C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include
.
В моих свойствах проекта мои пути каталога include под VC++ Directories
равны $(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath)
Как проверить, установлены ли эти макросы, и если они не там, где atlbase.h
(т.е. C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include
), как это исправить?
========== РЕДАКТИРОВАТЬ 2: Добавлены распространяемые Microsoft Visual С++ ==========
Отвечаем jp2code ответ на машину, которая работает, и тот, у которого нет аналогичного массива Microsoft Visual С++ Redistributables, установленного в виде следующих снимков экрана (рабочая машина слева):
========== EDIT 3: Переменные среды ==========
В его ответ pje объясняет, как искать переменные среды. %VCInstallDir%
правильно установлен на C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\
Но если я нажму правой кнопкой мыши на строке #include <atlbase.h>
, я получаю эту ошибку, которая предполагает, что, несмотря на правильность %VCInstallDir%
, это не то место, где смотрит VS:
========== РЕДАКТИРОВАНИЕ 4: Настройка инструментария платформы ==========
Другая возможность - это настройка проекта Configuration Properties | General | Platform Toolset
, предложенная мануэлем в комментариях и Майкл Берр в его ответе. Для проекта установлено значение Visual Studio 2012 (v110)
, но единственная другая опция, указанная в раскрывающемся списке, - v110_wp80
, которая при выборе становится Windows Phone 8.0 (v110)
. Если я отредактирую файл .vcxproj в блокноте и снова открою проект в Visual Studio Ultimate 2013, на странице свойств теперь отображается набор инструментов платформы как Visual Studio 2013 (v120) (not installed)
.
Если я запустил новый проект С++ Windows Store, я могу без проблем установить набор инструментов для платформы Visual Studio 2013 (v120)
, на самом деле это единственный параметр, указанный в раскрывающемся списке. (N.B. Новый проект имеет Target Platform Version
, установленный в "Windows 8.1", и он неактивен, поэтому я не могу его изменить, в то время как проект с ошибкой установлен на Windows 8.)
========== РЕДАКТИРОВАТЬ 5: Весь файл настроек проекта ==========
В комментариях Michael говорится, что "возможно, может быть полезно опубликовать .vcxproj где-нибудь (например, как gistub github)". Я разместил его здесь.
========== EDIT 6: Удаление и переустановка Visual Studio 2013 Ultimate ===========
Не действует, повторяется одна и та же ошибка.