什么是Windows的C进行默认的生成? [英] What is the default generator for CMake in Windows?
问题描述
在一台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屋!