首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WAF: MinGW (GCC)与MSVC 2012年的冲突

WAF: MinGW (GCC)与MSVC 2012年的冲突
EN

Stack Overflow用户
提问于 2012-12-28 16:39:10
回答 1查看 1.2K关注 0票数 3

我刚和WAF碰上了不幸。我专门用MinGW-w64来制造东西。但是,最近,我已经安装了MSVC 2012,因为有时它需要构建各种小的实用程序,在使用MinGW构建时会遇到一些问题。

WAF鼓励不要将编译器的选择硬编码到wscript中,而是从命令行中选择它,这听起来很合理,在本例中我也是这样认为的。因此,wscript应该是这样的(忘记boost):

代码语言:javascript
复制
def options(ctx):
    ctx.load(('compiler_cxx', 'boost'))


def configure(ctx):
    ctx.load(('compiler_cxx', 'boost'))
    ctx.check_boost()

然后,只需输入命令行:

代码语言:javascript
复制
waf --boost-includes=D:/Applications/Boost/include --check-cxx-compiler=gxx configure build

--check-cxx-compiler=gxx首先强制WAF查找MinGW,因为默认情况下,Windows首选MSVC。

注意: MinGW-w64在PATH中,MSVC不在,但是WAF仍然可以通过注册表找到它。

因此,WAF在配置输出中给出了这一点(这意味着一切都很酷):

代码语言:javascript
复制
Checking for 'gxx' (c++ compiler)        : D:\Applications\MinGW-w64\bin\g++.exe

然后它开始建设,我得到的是长时间的垃圾邮件:

代码语言:javascript
复制
Build failed
Traceback (most recent call last):
  File "D:\Applications\WAF\waf-1.7.8-77e2cdd38ea2930f982e3aabf335fdb7\waflib\Task.py", line 123, in process
    ret=self.run()
  File "D:\Applications\WAF\waf-1.7.8-77e2cdd38ea2930f982e3aabf335fdb7\waflib\Task.py", line 47, in run
    return m1(self)
  File "D:\Applications\WAF\waf-1.7.8-77e2cdd38ea2930f982e3aabf335fdb7\waflib\Task.py", line 47, in run
    return m1(self)
  File "<string>", line 28, in f
  File "D:\Applications\WAF\waf-1.7.8-77e2cdd38ea2930f982e3aabf335fdb7\waflib\Tools\msvc.py", line 685, in exec_command_msvc
    return self.exec_command_nomsvc(*k,**kw)

    ... (repeated thousands of times)

  File "D:\Applications\WAF\waf-1.7.8-77e2cdd38ea2930f982e3aabf335fdb7\waflib\Tools\msvc.py", line 685, in exec_command_msvc
    return self.exec_command_nomsvc(*k,**kw)
File "D:\Applications\WAF\waf-1.7.8-77e2cdd38ea2930f982e3aabf335fdb7\waflib\Tools\msvc.py", line 684, in exec_command_msvc
    if self.env['CC_NAME']!='msvc':
  File "D:\Applications\WAF\waf-1.7.8-77e2cdd38ea2930f982e3aabf335fdb7\waflib\ConfigSet.py", line 35, in __getitem__
    self=self.parent
RuntimeError: maximum recursion depth exceeded

MSVC应该如何参与这个构建过程?!-我不知道。但无论如何,最有趣的部分来了。让我们打破推荐和硬代码GCC成为我们在wscript的选择。

代码语言:javascript
复制
def options(ctx):
    ctx.load(('boost'))


def configure(ctx):
    ctx.load(('gxx', 'boost'))
    ctx.check_boost()

然后我们援引:

代码语言:javascript
复制
waf --boost-includes=D:/Applications/Boost/include configure build

并在配置输出中看到:

代码语言:javascript
复制
Checking for program g++,c++             : D:\Applications\MinGW-w64\bin\g++.exe
Checking for program ar                  : D:\Applications\MinGW-w64\bin\ar.exe

注意:注意到输出是如何变化的?这对我来说已经是个谜了,因为cxx_compiler工具(在前面的案例中使用)本身在幕后调用了ctx.load('gxx')。那么,在这两种情况下,这两种输出怎么会有所不同呢?

然后WAF开始构建,然后您就可以:

代码语言:javascript
复制
'build' finished successfully (1.155s)

让我知道你们的想法,希望有人已经遇到了这种情况。

星环

WAF 1.7.8

MinGW-w64 (GCC 4.7.2)

MSVC 2012

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-29 04:21:33

我向Thomas提交了一份bug报告,他发现这是最近的一个补丁造成的。恢复此修补程序修复了问题。有关更多细节,请参见这两个问题:

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

https://stackoverflow.com/questions/14072705

复制
相关文章

相似问题

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