Windows 中 CMake 的默认生成器是什么?

2024-04-19

在一台 PC 上运行 CMake 时,CMake 默认生成 NMake 文件。另一方面,它生成一个 Visual Studio 项目。

我知道我可以通过添加来覆盖默认值-G "NMake Makefiles"到我的 CMake 语句的末尾,但我想知道为什么它在一个上默认为 Visual Studio 项目,而在另一个上默认为 NMake 文件。


以下内容来自 CMake 源代码(版本 2.8.4:cmake.cxx:起始行 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";

看来 CMake 会查看 Windows 注册表来确定使用哪个生成器。它在以下位置搜索 Visual Studio 注册表子项(6.0、7.0 等)[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\对于一个名为InstallDir。如果找到,它将使用相应的生成器。 (它将使用可用的最新版本的 Visual Studio。)否则,它将使用 NMake 生成器。

请注意,InstallDir即使安装了特定版本的 Visual Studio,条目也不总是存在。这可能与安装设置或 Visual Studio 的特定版本有关(例如,Visual C++ 的“Express”版本似乎没有添加此条目。)

当然,可以通过附加来覆盖默认设置-G {Generator Name}到 CMake 命令的末尾。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 中 CMake 的默认生成器是什么? 的相关文章

随机推荐