什么是Windows的C进行​​默认的生成? [英] What is the default generator for CMake in Windows?

查看:118
本文介绍了什么是Windows的C进行​​默认的生成?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在一台PC上运行的CMake,CMake的默认生成NMAKE文件。在另一个,它会生成一个Visual Studio项目。

When running CMake on one PC, CMake generates NMake files by default. On another, it generates a Visual Studio project.

我知道我可以通过添加 -GNMAKE Makefile文件来我的CMake的语句结尾覆盖默认的,但我想知道为什么它默认到Visual Studio对另一个与NMAKE文件的项目。

I know I can override the default by adding -G "NMake Makefiles" to the end of my CMake statement, but I want to know why it defaults to Visual Studio projects on one and NMake files on another.

推荐答案

以下是从CMake的源代码(版本2.8.4:cmake.cxx:首发2039):

The following is from the CMake Source (version 2.8.4: cmake.cxx: starting line 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 \\\\ \\\\微软的VisualStudio \\\\ 为名为 INSTALLDIR 。如果找到一个,它采用了相应的发电机。 (它会使用现有的Visual Studio的最新版本。)否则,它使用NMAKE生成。

It appears that CMake looks at the Windows Registry to determine which generator to use. It searches the Visual Studio registry subkeys (6.0, 7.0, etc) in [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\ for an entry called InstallDir. If one is found, it uses the corresponding generator. (It will use the newest version of Visual Studio available.) Otherwise, it uses the NMake generator.

请注意, INSTALLDIR 项并不总是present,在安装Visual Studio的特定版本时也是如此。这可能与安装设置或Visual Studio的特定版本做的(例如,它似乎的Visual C ++的前preSS版本不添加此项。)

Note that the InstallDir entry is not always present, even when a particular version of Visual Studio is installed. This may have to do with installation settings or a particular version of Visual Studio (e.g. it seems that the "Express" versions of Visual C++ do not add this entry.)

这是当然的,可能通过追加 -G {生成器名称} 您的CMake命令的末尾来覆盖默认设置。

It is, of course, possible to override the default setting by appending -G {Generator Name} to the end of your CMake command.

这篇关于什么是Windows的C进行​​默认的生成?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆