【发布时间】:2019-08-13 12:40:37
【问题描述】:
我需要构建一个使用 SCons 的依赖项,并且我需要使用 VC++2017 构建它,因为我拥有的另一个依赖项无法使用 VC++2019 构建。
SCons 成功检测到 VC++2019 (v14.2),但未检测到 VC++2017 (v14.1):
c:\Python27\Scripts\scons [...] --msvc-version=14.1 [...]
scons: Reading SConscript files ...
scons version: 3.1.1
python version: 2 7 13 'final' 0
scons: warning: VC version 14.1 not installed. C/C++ compilers are most likely not set correctly.
Installed versions are: ['14.2', '14.0', '11.0']
[...]
C++ compiler $CC does not work
我已经安装了 Visual Studio 2019 Enterprise 和 Visual Studio 2019 构建工具,我已经安装了 v14.1 和 x86/x64 的平台工具/编译器。使用 VC++2017 平台工具编译在 Visual Studio 2019 以及使用 MSBuild 中都可以正常工作,因此问题似乎只出在 SCons 上。
SCons 如何检测 VC++2017 和 VC++2019,我应该从哪里开始寻找问题?
(关于这方面有一些老话题,但大多数都是关于人们想知道为什么使用 registry 和 vcvars.bat 的“经典”检测/配置方法不再起作用,所以这些没有帮助)
【问题讨论】:
-
我们修改了 SCons (2.5.1) 版本以支持 14.1。问题是 VS 不再设置 SCons 用来检测其存在的注册表项,因此我们添加了对
vswhere的调用来查找它。要查看此版本 SCons 的文件位于Scons/Tool/msvs.py和SConst/Tool/MSCommon中,请查看common.py、vs.py和vc.py。 -
@metal 谢谢。我自己找到了这些 py 文件,看起来 SCons 总是使用默认工具版本(在本例中为 VC++2019),而不是我指定的次要版本。评论说“目前”不支持此功能。你知道这是否会在未来得到解决?无论如何,我现在必须找到解决方法......
-
从 VS2019 和 VS Built Tools 2019 中卸载 v14.2 平台工具的明显解决方法并没有解决它,除了 SCons 现在也不再检测 v14.2。也没有修改
VCToolsVersion.default.txt,SCons 似乎正在解析。 -
我们还没有更新到 14.2,所以我还没有遇到过。看一眼SCons github,看起来它们被埋没了——683 个问题和 18 个公开 PR。我不知道他们什么时候会更新任何东西。 (在这一点上,我自己更喜欢其他跨平台构建系统。CMake 不是万能药,但在我的用例中它比 SCons 更好。Meson 是另一个合理的选择。)
-
@metal 我在构建系统中别无选择,因为我正在构建一个依赖库。我个人每天都会选择 MSBuild 或 Visual Studio,而不是任何第三方工具。但是,我现在找到了一个有点干净的解决方案并发布了答案。感谢您的帮助。
标签: c++ visual-c++ visual-studio-2017 scons