Sau đây là từ Nguồn CMake (phiên bản 2.8.4: cmake.cxx: bắt đầu từ dòng 2039):
// Try to find the newest VS installed on the computer and
// use that as a default if -G is not specified
std::string vsregBase =
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\";
struct VSRegistryEntryName
{
const char* MSVersion;
const char* GeneratorName;
};
VSRegistryEntryName version[] = {
{"6.0", "Visual Studio 6"},
{"7.0", "Visual Studio 7"},
{"7.1", "Visual Studio 7 .NET 2003"},
{"8.0", "Visual Studio 8 2005"},
{"9.0", "Visual Studio 9 2008"},
{"10.0", "Visual Studio 10"},
{0, 0}};
for(int i =0; version[i].MSVersion != 0; i++)
{
std::string reg = vsregBase + version[i].MSVersion;
reg += ";InstallDir]";
cmSystemTools::ExpandRegistryValues(reg);
if (!(reg == "/registry"))
{
installedCompiler = version[i].GeneratorName;
}
}
cmGlobalGenerator* gen
= this->CreateGlobalGenerator(installedCompiler.c_str());
if(!gen)
{
gen = new cmGlobalNMakeMakefileGenerator;
}
this->SetGlobalGenerator(gen);
std::cout << "-- Building for: " << gen->GetName() << "\n";
Dường như CMake nhìn vào Windows Registry để xác định máy phát điện để sử dụng. Nó tìm kiếm các khoá con đăng ký Visual Studio (6.0, 7.0, v.v.) trong [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\
cho một mục có tên là InstallDir
. Nếu được tìm thấy, nó sử dụng máy phát điện tương ứng. (Nó sẽ sử dụng phiên bản mới nhất của Visual Studio có sẵn.) Nếu không, nó sử dụng bộ tạo NMake.
Lưu ý rằng mục nhập InstallDir
không phải lúc nào cũng có mặt, ngay cả khi phiên bản cụ thể của Visual Studio được cài đặt. Điều này có thể phải làm với cài đặt cài đặt hoặc phiên bản cụ thể của Visual Studio (ví dụ như có vẻ như các phiên bản "Express" của Visual C++ không thêm mục này.)
Tất nhiên, có thể ghi đè lên mặc định thiết lập bằng cách thêm -G {Generator Name}
vào cuối lệnh CMake của bạn.
Đây có phải là phiên bản tương tự của CMake không? – rubenvb
Có, phiên bản là 2.8.4 trên cả hai máy. – cfinley
Tôi thực sự đã tìm thấy một giải pháp, nhưng nó sẽ không cho phép tôi đăng nó trong bảy giờ nữa ... <. < – cfinley