CMake: как указать версию Visual C++ для работы?

У меня установлено несколько версий Visual Studio (пробная версия 2010, 2012, 2015).

Как я могу заставить CMake генерировать make-файлы для конкретной версии VS? По умолчанию генерируется для VS2015.

2 ответа

Решение

Сначала вы можете проверить, какие генераторы поддерживает ваша версия CMake (и как они называются):

> cmake.exe --help
...
The following generators are available on this platform:
...
  Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project files.
                                 Optional [arch] can be "Win64" or "ARM".    
...

Тогда вы можете дать генератор с

  1. cmake.exe -G "Visual Studio 11" .. (короткое имя)
  2. cmake.exe -G "Visual Studio 11 2012" .. (ФИО)

Я предпочитаю позже, из-за его ясности. И у меня обычно есть этот вызов в оболочке сценария сборки:

@ECHO off
IF NOT EXIST "BuildDir\*.sln" (
    cmake -H"." -B"BuildDir" -G"Visual Studio 11 2012"
)
cmake --build "BuildDir" --target "ALL_BUILD" --config "Release"

Полное имя передается во внутреннюю кешированную переменную CMake CMAKE_GENERATOR, Таким образом, вышеуказанные вызовы эквивалентны

  1. cmake -DCMAKE_GENERATOR="Visual Studio 11 2012" ..

Это дает нам интересную возможность. Если вы разместите файл с именем PreLoad.cmake параллельно вашей главной CMakeLists.txt файл, который вы можете заставить по умолчанию (если доступно) взять для вашего проекта там

  1. cmake.exe ..

    PreLoad.cmake

    if (NOT "$ENV{VS110COMNTOOLS}" STREQUAL "")
        set(CMAKE_GENERATOR "Visual Studio 11 2012" CACHE INTERNAL "Name of generator.")
    endif()
    

Иногда вам может понадобиться добавить также -T <toolset-name> или же -A <platform-name> опция:

  1. cmake.exe -G "Visual Studio 10" -T "v90" ..

И последнее, но не менее важное, если вы действительно заинтересованы только в компиляторе

  1. "\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"

    cmake.exe -G "NMake Makefiles" ..


Рекомендации

cmake -G "Visual Studio 12" ..\MyProject
Другие вопросы по тегам