wave.cfg

今日もwaveをいじってました。
waveをそのまま起動すると、インクルードディレクトリや事前定義マクロが設定されていないので、
コマンドライン引数で指定する必要があります。
ただ毎回設定すると面倒なので、設定ファイルを使った方がよいです。
既定では、入力ファイルのあるディレクトリから上へ辿って最初に見つかったwave.cfgが使われます。
書式はコマンドライン引数を1行に1つずつ並べて書くだけです。いわゆるレスポンスファイルですね。
VC++9.0風ならこんな感じです。

-D_CPPUNWIND=1
-D_M_IX86=600
-D_WIN32=1
-D_CPPRTTI=1
-D_MSC_EXTENSIONS=1
-D_MSC_VER=1500
-D_MSC_FULL_VER=150030729
-D_MT=1
-D_NATIVE_WCHAR_T_DEFINED=1
-D__BOOL_DEFINED=1
-D_INTEGRAL_MAX_BITS=64
-SC:\Boost\src\svn
-Sc:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ATLMFC\INCLUDE
-Sc:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\INCLUDE
-SC:\Program Files\\Microsoft SDKs\Windows\v6.0A\include
-S.


ただし、インタラクティブモードの場合には二つ制限があります。

  • 入力ファイルがないので設定ファイルを明示的に指定する必要がある
  • マクロ定義がクリアされる

二つ目は次のパッチで改善できます。

Index: cpp.cpp
===================================================================
--- cpp.cpp	(リビジョン 57536)
+++ cpp.cpp	(作業コピー)
@@ -996,7 +996,7 @@
         if (is_interactive) {
         // if interactive we don't warn for missing endif's etc.
             ctx.set_language(
-                boost::wave::enable_single_line(ctx.get_language()));
+                boost::wave::enable_single_line(ctx.get_language()), false);
         }
         
     // analyze the input file

ちゃんと調べてないので、何か挙動が怪しくなるかもしれません。