cmakeを使用してboost.waveをプリプロセッサとして使用するにはどうすればよいですか
-
25-09-2019 - |
質問
コンパイラに付属のプリプロセッサではなく、boost.waveをプリプロセッサとして使用しようとしています。これを達成する方法がわかりません。
ビルド システム ジェネレーターとして CMake を使用していますが、プリプロセッサーが boost.wave であることを指定するにはどうすればよいですか。これは Windows (MSVC) と Linux (gcc) の両方で動作するはずです。
Stack Overflow アーカイブをグーグルで検索しても答えは得られませんでした
いずれにせよ、コンパイラはファイルを前処理します。したがって、ここでは 2 つの前処理ステップが関係しているようです。
解決
これは 2 段階のプロセスです。
まず、CMake に Wave をカスタム コマンドとして使用するように指示する必要があります。CMake を使用する add_custom_command
. 。このコマンドを定義すると、カスタム コマンドに指定した依存関係が一致するたびにこのコマンドが呼び出されます。
次に、すべての定義済みマクロと、コンパイラーが通常使用する (システム) インクルード パスを把握する必要があります。Wave は特定のコンパイラについては何も知りません。したがって、特定のコンパイラに対してファイルを適切に前処理するには、すべての (関連する) 定義済みマクロ (通常はコンパイラによって事前定義されている) とすべてのシステム インクルード パス (通常、デフォルトでコンパイラに認識されている) を呼び出し中に渡す必要があります。波。これらのオプションをすべて Wave のコマンド ラインに入力するのが面倒な場合 (おそらく実際そうなのでしょう)、 オプションファイル Wave の場合 (次のようにコマンドラインに追加します) @cfgfile
)。MSVC 2005 の例を次に示します。
-SC:\Program Files (x86)\Microsoft Visual Studio 8\VC\include
-SC:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK\Include
-D_MT
-D_MSC_VER=1400
-D_MSC_FULL_VER=140050727
-D_MSC_EXTENSIONS
-D_M_IX86
確かに、ここで Wave の他のオプションを追加することもできます。コンパイラーごとに異なる構成ファイルを用意すると、CMake 内からの管理が容易になります。