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

Windows中CMake的默认生成器是什么?,c,visual-studio,cmake,generator,nmake,C,Visual Studio,Cmake,Generator,Nmake,在一台PC上运行CMake时,默认情况下,CMake生成NMake文件。另一方面,它生成一个VisualStudio项目 我知道我可以通过在CMake语句末尾添加-G“NMake makefile”来覆盖默认值,但我想知道为什么它在一个语句上默认为Visual Studio项目,在另一个语句上默认为NMake文件。以下内容来自CMake源代码(版本2.8.4:CMake.cxx:起始行2039): //尝试查找计算机上安装的最新VS,然后 //如果未指定-G,则将其用作默认值 std::stri

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


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

以下内容来自CMake源代码(版本2.8.4:CMake.cxx:起始行2039):

//尝试查找计算机上安装的最新VS,然后
//如果未指定-G,则将其用作默认值
std::string-vsregBase=
“[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\”;
结构VSRegistryEntryName
{
常量字符*MSVersion;
const char*GeneratorName;
};
VSRegistryEntryName版本[]={
{“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}};
对于(int i=0;version[i].MSVersion!=0;i++)
{
std::string reg=vsregBase+version[i].MSVersion;
reg+=“安装目录]”;
cmSystemTools::ExpandRegistryValues(reg);
如果(!(reg==“/注册表”))
{
installedCompiler=version[i]。GeneratorName;
}
}
cmGlobalGenerator*gen
=此->CreateGlobalGenerator(installedCompiler.c_str());
如果(!gen)
{
gen=新的cmGlobalNMakeMakefileGenerator;
}
此->设置全局发电机(gen);

std::这是CMake的同一版本吗?是的,两台机器上的版本都是2.8.4。我实际上找到了一个解决方案,但它不允许我再发布七个小时。。。你可能现在就可以把你的解决方案发布到@chrisfinley-现在已经七年了:)@user2023370-Ha!那天晚些时候我确实发了出来……这也是件好事,因为如果我不记得的话,我现在不可能记住它;-)Visual Studio 14社区没有
InstallDir
。我想自动选择64位的
cmake
generator,但似乎没有简单的方法。实际上它就在那里,如果Windows本身是64位的,只需确保查看
W6432Node
,因为VS是一个32位的应用程序。也是最新的cmake中供任何人寻找的一行。为此,您应该联系
cmake
project,也许有一些环境变量可以选择
Win64
版本。或者,您可以使用python版本,让它选择64位生成器。我希望cmake对此有一些选择。这个话题是在cmake GitLab问题中提出的。唉,问题已经解决了。
  // 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";