c visual-studio cmake generator nmake

¿Cuál es el generador predeterminado para CMake en Windows?



visual-studio generator (1)

Al ejecutar CMake en una PC, CMake genera archivos NMake por defecto. Por otro, genera un proyecto de Visual Studio.

Sé que puedo anular el valor predeterminado al agregar -G "NMake Makefiles" al final de mi declaración de CMake, pero quiero saber por qué el valor predeterminado es proyectos de Visual Studio en uno y archivos NMake en otro.


Lo siguiente es de CMake Source (versión 2.8.4: cmake.cxx: línea de inicio 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";

Parece que CMake mira el Registro de Windows para determinar qué generador usar. Busca en las subclaves del registro de Visual Studio (6.0, 7.0, etc.) en [HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//VisualStudio// para una entrada llamada InstallDir . Si se encuentra uno, utiliza el generador correspondiente. (Utilizará la versión más reciente de Visual Studio disponible). De lo contrario, utiliza el generador NMake.

Tenga en cuenta que la entrada InstallDir no siempre está presente, incluso cuando se instala una versión particular de Visual Studio. Esto puede tener que ver con la configuración de instalación o una versión particular de Visual Studio (por ejemplo, parece que las versiones "Express" de Visual C ++ no agregan esta entrada).

Por supuesto, es posible anular la configuración predeterminada agregando -G {Generator Name} al final de su comando CMake.