C++ 使用同一编译器版本进行CMake和多个Visual Studio安装 脚本

C++ 使用同一编译器版本进行CMake和多个Visual Studio安装 脚本,c++,visual-studio,cmake,visual-studio-2017,C++,Visual Studio,Cmake,Visual Studio 2017,一位同事不久前建立了一个系统。他们安装了VisualStudio15 Community Edition,只是为了测试构建过程 后来,另一位同事被指派使用这台机器。在他们不知道的情况下,这台机器上仍然安装了Visual Studio 15,但由于我们有商业许可证,除了alrready安装的社区版之外,他们还安装了Visual Studio 15 Professional 行为 值得注意的是,Community Edition安装了MFC工具集,而Professional Edition安装没有

一位同事不久前建立了一个系统。他们安装了VisualStudio15 Community Edition,只是为了测试构建过程

后来,另一位同事被指派使用这台机器。在他们不知道的情况下,这台机器上仍然安装了Visual Studio 15,但由于我们有商业许可证,除了alrready安装的社区版之外,他们还安装了Visual Studio 15 Professional

行为 值得注意的是,Community Edition安装了MFC工具集,而Professional Edition安装没有

之后,第二位同事使用我们的自动过程调用CMake,首先为Visual Studio生成项目文件,然后使用标准命令执行构建管道:

cmake-G“Visual Studio 15 Win64”。

这导致了编译错误,因为专业版没有可用的MFC工具集,因此构建管道失败。然而,在IDE中编译是成功的。不久之后,人们发现,通过Windows开始菜单打开“Visual Studio”会导致打开社区版而不是专业版。由于MFC工具集当时可用,IDE编译成功

问题: 这个问题的解决方案是显而易见的,还是CMake有办法决定使用哪个编译器

目前,我有以下假设,并希望验证或反驳这些假设:

  • 每个VisualStudio版本都有自己的编译器,各自的安装程序可以为其启用/禁用其他工具集
  • 这两个Visual Studio版本不共享同一个comiler。(他们不共享工具集似乎是显而易见的)
  • CMake没有其他设置来声明这些不同的VisualStudio安装的哪些编译器将用于执行构建管道
  • CMake使用Professional Edition编译器来执行构建管道的原因仅仅是因为Professional版本是第二个安装的,可能会覆盖CMake用于查找编译器的路径(注册表项?)

这个评估正确吗?此处是否发生了其他情况?

手动设置cmake的工具链,而不是依靠模糊的自动检测,这是一个好主意。我建议重新安装系统,因为我认为这不是安装两个VS 2015的唯一问题versions@RoQuOTriX除此之外,您还希望遇到哪些其他问题?我知道多个VS安装可以在一个系统上共存,但没有处理同一版本的两个安装的经验(即使在这种情况下版本不同)。我在安装了VS 2015和VS 2017的系统上使用Qt加载项时遇到问题,但可能我设置错误。我对这个用例也没有任何经验,但是你知道,它是windows,而且每一个程序更多,都会使它更不稳定,即使这样,当你两次安装同一个大程序时。这不是一个基于事实的观点,更多的是基于感觉当使用
cmake-G“Visual Studio 15 Win64”
执行时,cmake希望处于使用
vcvvarsall.bat
脚本设置的环境中。通过运行与特定VisualStudio安装相对应的脚本,您可以控制CMake在配置期间的操作。