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