3

私はちょうどWAFで悲惨に遭遇しました。私はMinGW-w64を排他的に使用してものを構築しています。しかし、最近、MSVC 2012をインストールしました。これは、MinGWでビルドするときに問題が発生する、さまざまな小さなユーティリティをビルドする必要がある場合があるためです。

WAFは、コンパイラーの選択をにハードコーディングするのwscriptではなく、コマンドラインから選択することをお勧めします。これは非常に合理的に聞こえます。この場合、私はその哲学に賛成です。したがって、は次のwscriptようになります(忘れてくださいboost):

def options(ctx):
    ctx.load(('compiler_cxx', 'boost'))


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

次に、コマンドラインに入力するだけです。

waf --boost-includes=D:/Applications/Boost/include --check-cxx-compiler=gxx configure build

WindowsではデフォルトでWAFが最初にMSVCを優先するため、--check-cxx-compiler=gxxWAFは最初にMinGWを検索するように強制されます。

注: MinGW-w64はに含まれていPATHますが、MSVCは含まれていませんが、レジストリが原因でWAFはそれを見つけることができます。

したがって、WAFは構成出力でこれを提供します(これはすべてがクールであることを意味します):

Checking for 'gxx' (c++ compiler)        : D:\Applications\MinGW-w64\bin\g++.exe

それからそれは構築を開始します、そして私が得るものはこの長いスパムです:

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

def options(ctx):
    ctx.load(('boost'))


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

次に、次を呼び出します。

waf --boost-includes=D:/Applications/Boost/include configure build

そして、構成出力を参照してください。

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')舞台裏で呼び出されるため、これはすでに私には謎です。では、これら2つの出力は、これら2つのケースでどのように異なるのでしょうか。

次に、WAFの構築が開始され、次のようになります。

'build' finished successfully (1.155s)

かっこいいでしょ?:)皆さんの考えを教えてください。うまくいけば、誰かがすでにこれに遭遇しています。

主演

WAF 1.7.8

MinGW-w64(GCC 4.7.2)

MSVC 2012

4

1 に答える 1

0

Thomas Nagyにバグレポートを提出したところ、最近のパッチの1つが原因であることがわかりました。このパッチを元に戻すと、問題が修正されました。詳細については、次の2つの問題を参照してください。

于 2012-12-29T04:21:33.690 に答える