我正在尝试使用Visual Studio 2010中的cl
来构建32位版本的Mixxx。 Mixxx使用SCons构建。我的计算机是Windows 7 64位,安装了太多版本的Visual Studio。
关注these instructions,我尝试了setenv
和vsvars
的各种组合和变体,但无论我做什么,我都会在这种情况下进入命令行:< / p>
> 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
指向&#34;版本16,x86&#34; - 很棒。
> 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
现在如何表示&#34;版本18,x64&#34;?它改变了我的环境吗?让我们来看看:
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
仍然意味着&#34;版本16,x86&#34;到终点站。但SCons总是使用&#34;最新版本,x64&#34;。
(根据我对Windows shell的理解,这甚至不可能。我杀了脚本,所以它没有做任何清理。cl
的含义如何改变那样的?)
我发现了一些提示:
基于此,我已添加
Environment(MSVC_VERSION = '10.0')
Environment(TARGET_ARCH = 'x86')
print 'hello world'
到SConstruct。我不了解SCons,构建脚本也不重要,所以我很可能做错了。无论如何,SCons仍然总是使用&#34;最新版本,x64&#34;。
答案 0 :(得分:6)
The Environment kwargs你为我发布了工作(Scons 2.3.4):
env = Environment(
MSVC_VERSION='12.0',
TARGET_ARCH='x86')
env.Program('src.cpp')
根据http://scons.1086193.n5.nabble.com/32-and-64-bit-builds-on-MSVC-td25425.html,64位程序的值应为TARGET_ARCH='x86_64'
。 MSVC_VERSION
的其他值也有效。
答案 1 :(得分:2)
我根据dirkbaechle的评论(set SCONS_MSCOMMON_DEBUG=-
)开启了记录。这非常有帮助。当我将Environment(MSVC_VERSION='10.0')
添加到SConstruct时,我可以在输出中看到
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”目录。
现在SCons将使用2010(又名“Microsoft Visual Studio 10.0”),因为所有更高版本都不可用。选择目标架构是类似的。
答案 2 :(得分:-1)
我尝试使用env = Environment(blabla)设置TARGET_ARCH,但没有帮助
因此,我在Scons目录(... \ PythonDir \ scons-3.0.1 \ Scons)中搜索“ TARGET_ARCH”。 就我而言,它位于 Environment.py 文件中,该文件具有包含默认值的部分。 我将 None 更改为'x86'
# 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 ,使其重新生成
成功了!