こんにちは、高木です。

前回に引き続き、PHPを使ってC言語やC++のソースコードをコンパイルする話題です。前回のやり方はGCCやClangでコンパイルするときはいいのですが、Visual C++ではうまくいきません。依存関係を表すファイルの形式がまったく異なるからです。今回はVisual C++に特化したやり方を解説したいと思います。

おさらいとして、コンパイルする対象となるソースファイル「a.cc」をもう一度掲載しておきます。

これをコンパイルするには、コマンドプロンプトから次のようなコマンドを実行します。

細かいコマンドプションは省略しています。唯一指定している/Feオプションは出力するファイル名を指定するためのものです。上記の例では「a」を指定していますので、「a.exe」が出力されます。

これだけでは依存関係を表すファイルは出力されません。Visual Studio 2019で導入された/sourceDependenciesオプションを指定する必要があります。このオプションのパラメータで渡した名前のファイルに依存関係を表すJSONが出力されます。

JSONファイルの名前を「a.json」とした場合、コマンドは次のようになります。

あとは、前回と同じように、生成されたa.jsonを解析して依存するファイル名を洗い出し、更新時刻を比較してあげればOKです。

PHPのコードは次のようになります。

概念的なことは前回と同じですので割愛します。json_decode関数等については、PHPの公式リファレンスを参照するようにしてください。今回は簡単な解説だけにとどめておくことにします。

ところで、前処理とは直接関係ないコンパイルをなぜわざわざPHPを使って行うのかについては、のちほど機会を見つけて解説したいと思います。とりあえず今回はこのあたりで。