Я сталкивался примерно с одной и той же проблемой несколько раз. Похоже, что структура, созданная MS для этого, настолько хрупка, что установка или удаление любого программного обеспечения на той же машине (или, очевидно, дыхание где-то рядом с этой машиной) может и сломает его. Хуже того, у них есть почти непроницаемая пачка пакетных файлов, вызывающих друг друга, которые в итоге выполняют довольно тривиальные задачи, которые кажутся едва ли не самым окольным путем.
Хотя я полагаю, что это тратит немного памяти, я решил немного упростить свою жизнь и использовать это:
#include <windows.h>
#include <iostream>
#include <string>
#include <process.h>
void setenv(std::string const &name, std::string const &value) {
SetEnvironmentVariable(name.c_str(), value.c_str());
}
std::string vs_base = "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\";
std::string vc_base = vs_base + "VC\\";
std::string sdk_dir = "C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\";
int main(int argc, char **argv) {
char inc_name[] = "INCLUDE";
char lib_name[] = "LIB";
char path_name[] = "PATH";
std::string inc_dir = getenv(inc_name);
std::string lib_dir = getenv(lib_name);
std::string path_dir = getenv(path_name);
inc_dir = vc_base + "include;" + sdk_dir + "include;" + inc_dir;
lib_dir = vc_base + "lib;" + sdk_dir + "lib;" + lib_dir;
path_dir = vc_base + "bin;" + sdk_dir + "bin;" + vs_base + "Common7\\IDE;" + path_dir;
setenv(inc_name, inc_dir);
setenv(lib_name, lib_dir);
setenv(path_name, path_dir);
char path[MAX_PATH];
GetSystemDirectory(path, sizeof(path));
strcat(path, "\\cmd.exe");
_spawnlp(_P_WAIT, path, path, NULL);
return 0;
}
Вам нужно будет настроить базовые каталоги вверху для мест, где у вас установлены вещи. На днях я полагаю, что мне следует переписать это, чтобы использовать отдельный файл конфигурации (я в значительной степени разработал формат XML, который должен работать достаточно хорошо), но это сработало достаточно хорошо, и я не потрудился закончить это, и так как это все равно для программиста, выполнение тривиальной модификации и перекомпиляции не особенно обременительно.