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".
...
Тогда вы можете дать генератор с
cmake.exe -G "Visual Studio 11" ..
(короткое имя)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
, Таким образом, вышеуказанные вызовы эквивалентны
cmake -DCMAKE_GENERATOR="Visual Studio 11 2012" ..
Это дает нам интересную возможность. Если вы разместите файл с именем PreLoad.cmake
параллельно вашей главной CMakeLists.txt
файл, который вы можете заставить по умолчанию (если доступно) взять для вашего проекта там
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>
опция:
cmake.exe -G "Visual Studio 10" -T "v90" ..
И последнее, но не менее важное, если вы действительно заинтересованы только в компиляторе
"\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"
cmake.exe -G "NMake Makefiles" ..