2011-06-21 59 views
15

Khi chạy CMake trên một PC, CMake tạo tệp NMake theo mặc định. Ngày khác, nó tạo ra một dự án Visual Studio.Trình tạo mặc định cho CMake trong Windows là gì?

Tôi biết tôi có thể ghi đè mặc định bằng cách thêm -G "NMake Makefiles" vào cuối tuyên bố CMake của mình, nhưng tôi muốn biết lý do mặc định dự án Visual Studio trên một tệp NMake trên một tệp khác.

+0

Đây có phải là phiên bản tương tự của CMake không? – rubenvb

+0

Có, phiên bản là 2.8.4 trên cả hai máy. – cfinley

+0

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

Trả lời

16

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.

+0

Vì hậu thế: có [một mục trong danh sách gửi thư của CMake] (http: //www.mail -archive.com/[email protected]/msg18033.html) giải quyết vấn đề này. Để thay đổi trình tạo mặc định, có vẻ như bạn cần phải sửa đổi nguồn CMake và biên dịch lại hoặc viết một tệp lô nhỏ để thêm tùy chọn '-G' để thay thế trình tạo khi không có quy tắc nào được chỉ định. –

+1

Cộng đồng Visual Studio 14 không có 'InstallDir'. Tôi muốn tự động chọn 64bit bộ tạo 'cmake', và dường như không có cách nào dễ dàng. – dashesy

+1

Trên thực tế nó ở đó, chỉ cần chắc chắn để xem bên trong 'W6432Node' nếu Windows chính nó là 64bit, bởi vì VS là một ứng dụng 32bit. – dashesy

Các vấn đề liên quan