我有一个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安装而不是它?
答案 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()">×</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