SCons检测到Visual C ++ v14.2(2019)但未检测到v14.1(2017)

时间:2019-08-13 12:40:37

标签: c++ visual-c++ visual-studio-2017 scons

我需要构建一个使用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 Build Tools,并且都为v14.1和x86 / x64安装了平台工具/编译器。使用VC ++ 2017平台工具进行编译在Visual Studio 2019中以及使用MSBuild都可以正常工作,因此问题似乎仅在于SCons。

SCons如何检测VC ++ 2017和VC ++ 2019,我应该从哪里开始寻找问题?

(与此相关的主题很旧,但是其中大多数都是关于人们想知道为什么使用注册表和vcvars.bat的“经典”检测/配置方法不再起作用的原因,所以这些都无济于事)

3 个答案:

答案 0 :(得分:1)

对于当前的骗局,它将相信它从vswhere.exe返回的版本被认为是权威的版本-2017和2019。您可以尝试看看能为您带来什么。

vswhere -products * -property installationPath

该信息用于帮助找到所需的 vars .bat文件,该文件将导入所需的渗出物。

答案 1 :(得分:0)

如果已安装Visual Studio 2019,则当前版本的SCons不支持选择MSVC v14.1。我通过查看SCons的代码确认了这一点。另请参阅对该问题的评论。

另一种方法是使用--msvc-script选项而不是--msvc-version

在MSVC安装文件夹(通常为c:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\中,您将找到一个名为vcvarsall.bat的文件。如果在不带参数的情况下运行此命令,则会看到可以为目标平台和工具版本(例如

)提供参数
vcvarsall.bat x86 10.0.17763.0 -vcvars_ver=14.1

可针对x86(32位),Windows SDK版本10.0.17763.0和工具版本14.1(Visual C ++ 2017)进行编译。

找到适合您的vcvarsall.bat命令行后,将其放入您创建的新BAT文件中,例如myvcconfig.bat(您必须使用{{1}的完整路径}),然后使用以下命令行切换到SCons:vcvarsall.bat

*注释*

  • SCons的某些参数是多余的,不适用于--msvc-script=myvcconfig.bat,例如--msvc-script。 SCons会告诉您有关它们的信息,因此只需从命令行中删除它们即可。

  • Visual Studio的安装路径可能与我上面提供的路径不同。您可以使用Microsoft自己的--32工具找到安装路径:https://github.com/Microsoft/vswhere/wiki/Examples

  • Visual Studio 2019和Visual Studio生成工具2019是具有单独的生成工具的单独安装。您可以检测和使用任何一个的vswhere文件。例如,如果要为构建服务器设置工具链,则可能要使用Visual Studio Build Tools2019。如果只想构建一个库(如我的情况),则只需使用Visual Studio。安装在您的开发机器上。

  • 如果您对SCons如何检测MSVC以及为什么它不起作用感兴趣,可以查看vcvarsall.bat中的源代码。您可以从https://github.com/SCons/scons克隆GIT存储库。

答案 2 :(得分:0)

我找到了一个完美而简单的解决方案:

  1. 打开文件 MSCommon / vc.py ,找到行:vc_pdir = os.path.join(vsdir[0], 'VC')
  2. 将[0]更改为[1]
  3. 重新构建,python将使用vs2017
  4. 原因是:如果安装多个vs版本,则vsdir [0]是最高版本