私はちょうど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=gxx
WAFは最初に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