CMake:如何指定要使用的Visual C++版本?

Pie*_*tro 17 version cmake visual-studio visual-c++

我安装了多个版本的Visual Studio(2010,2012,2015试用版).

如何强制CMake为特定的VS版本生成makefile?默认情况下,它为VS2015生成.

Flo*_*ian 24

首先,您可以检查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".    
...
Run Code Online (Sandbox Code Playgroud)

然后你可以给发电机

  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"
Run Code Online (Sandbox Code Playgroud)

全名将传输到内部缓存的CMake变量名称CMAKE_GENERATOR.所以上面的调用相当于

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

这给了我们一个有趣的可能性.如果将一个名为PreLoad.cmakeparallel 的文件放在主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()
    
    Run Code Online (Sandbox Code Playgroud)

有时您可能需要添加-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" ..


参考