2011-06-21 7 views
15

1台のPCでCMakeを実行すると、CMakeはデフォルトでNMakeファイルを生成します。もう1つは、Visual Studioプロジェクトを生成します。WindowsのCMakeのデフォルトジェネレータは何ですか?

私はCMakeステートメントの最後に-G "NMake Makefiles"を追加してデフォルトを上書きすることができますが、1つはVisual Studioプロジェクトに、もう1つはNMakeファイルにデフォルトする理由を知りたいと思います。

+0

CMakeと同じバージョンですか? – rubenvb

+0

はい、どちらのマシンでもバージョンは2.8.4です。 – cfinley

+0

私は実際に解決策を見いだしましたが、さらに7時間ポストすることはできません... < – cfinley

答えて

16

次はCMakeのソース(:cmake.cxx:で始まる行2039バージョン2.8.4):からである

// 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など)を検索し、InstallDirというエントリを検索します。見つかった場合は、対応するジェネレータを使用します。 (使用できるVisual Studioの最新バージョンを使用します)。それ以外の場合は、NMakeジェネレータを使用します。

Visual Studioの特定のバージョンがインストールされている場合でも、InstallDirのエントリは常に存在するとは限りません。これは、インストール設定やVisual Studioの特定のバージョン(Visual C++の "Express"バージョンがこのエントリを追加していないなど)と関連している可能性があります。

もちろん、デフォルトあなたのCMakeコマンドの最後に-G {Generator Name}を追加して設定します。

+0

後書き:CMakeメーリングリストにエントリがあります(http://www.mail -archive.com/[email protected]/msg18033.html)を参照してください。デフォルトのジェネレータを変更するには、CMakeソースを変更し、何も指定されていないときにジェネレータを置き換えるための '-G'オプションを追加する小さなバッチファイルを再コンパイルまたは書き込む必要があるようです。 –

+1

Visual Studio 14コミュニティには「InstallDir」がありません。私は 'cmake'ジェネレータの64ビットの選択を自動化したいと思いますし、簡単な方法はないようです。 – dashesy

+1

実際にはそこにあります.VSは32ビットアプリケーションであるため、Windows自体が64ビットの場合は 'W6432Node'を確認してください。 – dashesy

関連する問題