首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制SCons在64位Windows上使用32位MSVC编译器

强制SCons在64位Windows上使用32位MSVC编译器
EN

Stack Overflow用户
提问于 2014-07-17 18:01:22
回答 3查看 4.7K关注 0票数 7

我正在尝试使用Visual 2010中的cl构建32位版本的Mixxx。Mixxx使用SCons构建。我的计算机是Windows 7 64位,安装了太多版本的Visual .

这些指示之后,我尝试了各种setenvvsvars的组合和变体,但是无论我做什么,在这种情况下我都会在命令行上结束:

代码语言:javascript
复制
> cl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

usage: cl [ option... ] filename... [ /link linkoption... ]

好的,所以cl指向“版本16,x86”-太棒了。

代码语言:javascript
复制
> scons toolchain=msvs force32=1 winlib=%cd%\winlib\x86 sqlitedll=0 staticlibs=1 asmlib=0

[... bunch of output truncated, until we start using the compiler ...]

cl /Fores\qrc_mixxx.obj /c res\qrc_mixxx.cc /TP /Zc:wchar_t- /GL /MP /fp:fast /G
[truncated]
Microsoft (R) C/C++ Optimizing Compiler Version 18.00.21005.1 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

(注意-我黑了SCons以删除/nologo)什么?cl现在是什么意思“版本18,x64"?它改变了我的环境吗?让我们找出:

代码语言:javascript
复制
Terminate batch job (Y/N)? y

>cl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

usage: cl [ option... ] filename... [ /link linkoption... ]

所以cl对终端的意思仍然是"version 16,x86“。但是SCons总是使用“最新版本,x64”。

(根据我对Windows的理解,这是不可能的。我杀了剧本,所以它没有做任何清理。cl 的含义如何变化?)

我发现了几个提示:

基于此,我增加了

代码语言:javascript
复制
Environment(MSVC_VERSION = '10.0')
Environment(TARGET_ARCH = 'x86')
print 'hello world'

给SConstruct。我不知道SCons,而且构建脚本并不简单,所以很可能我做错了。无论如何,SCons仍然总是使用“最新版本,x64”。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-18 03:41:49

我打开了每一个dirkbaechle的评论(set SCONS_MSCOMMON_DEBUG=-)日志记录。这很有帮助。当我将Environment(MSVC_VERSION='10.0')添加到SConstruct时,我可以在输出中看到

代码语言:javascript
复制
get_default_version(): msvc_version:10.0 msvs_version:None
msvc_setup_env: using specified MSVC version '10.0'

[ ... truncated ... ]

get_default_version()
get_default_version(): msvc_version:None msvs_version:None
installed_vcs:['12.0', '10.0', '10.0Exp', '9.0']
msvc_setup_env: using default installed MSVC version '12.0'

哎呀--当我们第二次调用get_default_version时,我们似乎在使用不同的环境。我不太理解Mixxx构建脚本,不知道为什么,但我很确定这就是原因。

简单的解决办法

对于像我这样懒得修改构建脚本的人来说,有一种很简单(但很难看)的方法可以强迫SCons做你想做的事情。你只需要故意破坏你的新版本(当然是暂时的)。例如,我想使用2010年,x86。首先,我重命名所有较高版本的"VC“目录。

  • C:\程序文件(X86)\MicrosoftVisualStudio12.0\ VC重命名为_DISABLED_VC
  • C:\Program (X86)\MicrosoftVisualStudio11.0\ VC重命名为x86

现在,SCons将使用2010 (又称“MicrosoftVisualStudio10.0”),因为所有更高的版本都不可用。选择目标体系结构是相似的。

  • C:\Program (X86)\MicrosoftVisualStudio10.0\VC\bin\ amd64重命名为x86
  • 同样适用于ia64x86_amd64x86_ia64等。
票数 2
EN

Stack Overflow用户

发布于 2014-10-27 16:47:55

你为我发布的工作报告(Scon 2.3.4):

代码语言:javascript
复制
env = Environment(
    MSVC_VERSION='12.0',
    TARGET_ARCH='x86')

env.Program('src.cpp')

根据TARGET_ARCH='x86_64',64位程序的值应该是TARGET_ARCH='x86_64'MSVC_VERSION的其他值也可以工作。

票数 6
EN

Stack Overflow用户

发布于 2018-07-19 00:25:07

我尝试使用env = Environment(blabla)设置TARGET_ARCH,但没有帮助

因此,我在Scon目录中搜索'TARGET_ARCH‘(.\PythonDir\scons-3.0.1\ Scons )。在我的例子中,它位于Environment.py文件中,其中有一个具有默认值的节。我把“零”改为“x86”

代码语言:javascript
复制
# Now set defaults for TARGET_{OS|ARCH}
...
# self._dict['TARGET_ARCH']    = self._dict.get('TARGET_ARCH',None)
self._dict['TARGET_ARCH']    = self._dict.get('TARGET_ARCH','x86')

然后,我删除了以前编译过的Environment.pyc,使其重新生成。

而且起作用了!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24810474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档