在Visual Studio 2017中使用已安装的CMake而不是嵌入式CMake

时间:2018-03-11 14:49:10

标签: cmake visual-studio-2017

我有一个CMake项目。它使用实际安装的CMake版本(3.11.0 rc2)支持的Boost(1.66.0)的最新版本,但不支持前一版本(3.10.0)。

如果我从命令行使用CMake构建它,一切正常,但如果我在Visual Studio 2017中打开该文件夹,我会收到一个错误,因为Visual Studio使用的CMake安装不是我的,但是它是一个嵌入它的安装:在输出面板中,完整的cmake命令路径为C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2017\COMMUNITY\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\CMake\bin\cmake.exe,这不是我安装的版本,它也是以前的版本(3.10.0),因此项目无法编译。

有没有办法告诉Visual Studio使用我的CMake安装而不是它?

3 个答案:

答案 0 :(得分:2)

否(除了下面显示的技巧),在CMakeSettings.json上使用{ "name": "Linux-Debug", "generator": "Unix Makefiles", "remoteMachineName": "${defaultRemoteMachineName}", "configurationType": "Debug", "remoteCMakeListsRoot": "/var/tmp/src/${workspaceHash}/${name}", "cmakeExecutable": "/usr/local/bin/cmake", "buildRoot": "${env.LOCALAPPDATA}\\CMakeBuilds\\${workspaceHash}\\build\\${name}", "remoteBuildRoot": "/var/tmp/build/${workspaceHash}/build/${name}", "remoteCopySources": true, "remoteCopySourcesOutputVerbosity": "Normal", "remoteCopySourcesConcurrentCopies": "10", "cmakeCommandArgs": "", "buildCommandArgs": "", "ctestCommandArgs": "", "inheritEnvironments": [ "linux-x64" ] } 进行Visual C++ for Linux Development with CMake时,您只能使用自己的CMake版本:

cmakeExecutable

但是您可以更广泛地使用> "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake" --version cmake version 3.10.18011902-MSVC_2 属性来支持功能请求:

一些背景资料

与@ usr1234567的答案一样,Visual Studio 2017使用 - 从版本15.6.1开始 - 它是CMake自己的分支:

Visual Studio 2017附带的版本不是您可以看到的正式版本:

cmd

所以我不确定官方CMake版本是否可以很好地/完全集成到Visual Studio 2017中。但是已经有一个请求将Microsoft特定的更改合并到CMake的主要分支:

编辑:可能的解决方法

一个简短的测试表明,我可以通过对Visual Studio的CMake文件夹进行简单的重命名并将其替换为系统安装的CMake版本的符号链接(来自> ren "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake" _CMake ... > mklink /d "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake" "C:\Program Files\CMake" ... 提示符)来诱骗Visual Studio获取已安装的版本拥有行政权利):

<div id="mySidenav" class="sidenav">
        <a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a>
        <a href="#">About</a>
        <a href="#">Services</a>
        <a href="#">Clients</a>
        <a href="#">Gallery</a>
        <a href="#">Contact</a>
    </div>

警告:在更新Visual Studio 2017之前,必须撤消此操作。否则,VS2017 udpate进程将替换/覆盖原始CMake安装。

答案 1 :(得分:0)

对于Visual Studio 2015,不支持使用外部CMake 来源:Marians answer to Dmitry's question / comment

最近blog post(2018年1月)的措辞

  

为了确保您能够访问CMake的最新功能,我们已将Visual Studio附带的CMake版本从3.9升级到3.10。

并不表示这没有改变。

更新: a recent preview from Visual Studio包括CMake 3.11。

答案 2 :(得分:0)

您已经从目前正在使用VS2017 15.6.6和VS2017 15.7.0 Preview 3.0的其他答案中了解到,您无法强制Visual Studio使用您首选的CMake安装。

但是,您可以采用不同的方式处理实际问题并解决它。

  

它使用实际支持的Boost(1.66.0)的最新版本   已安装CMake版本(3.11.0 rc2),但未安装在之前的版本(3.10.0)。

只需下载较新版本的FindBoost.cmake并将其安装在CMAKE_BINARY_DIR内,然后将您的CMakeLists.txt指向喜欢它:

if (CMAKE_VERSION VERSION_LESS 3.11)
  # Latest FindBoost.cmake has likely been updated to detect Boost version not yet released
  if (NOT EXISTS "${CMAKE_BINARY_DIR}/cmake/FindBoost.cmake")
    message(STATUS "Downloading FindBoost.cmake from https://gitlab.kitware.com/cmake/ release branch")
    file(DOWNLOAD
      "https://gitlab.kitware.com/cmake/cmake/raw/release/Modules/FindBoost.cmake"
      "${CMAKE_BINARY_DIR}/cmake/FindBoost.cmake")
  endif()
  list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_BINARY_DIR}/cmake)
endif()

对于Boost.GIL,我已经使用了这种方法很长一段时间,https://github.com/boostorg/gil