gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:29:48 24 4
gpt4 key购买 nike

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

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

最佳答案

以下内容来自CMake Source(版本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 注册表来确定要使用的生成器。它在 [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\ 中搜索 Visual Studio 注册表子项(6.0、7.0 等)以查找名为 InstallDir 的条目。如果找到一个,它会使用相应的生成器。 (它将使用可用的最新版本的 Visual Studio。)否则,它将使用 NMake 生成器。

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

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

关于c - Windows 中 CMake 的默认生成器是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6430251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com