Visual Studio 2015 までは MSBuild は C:\Program Files (x86)\MSBuild\<VisualStudioのバージョン>\Bin\MSBuild.exe
にインストールされていたのですが、2017 だとこの場所にはありません。
で、調べたところ… C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\bin\MSBuild.exe
にありました。Community
と含まれているので、Visual Studio のエディションによって微妙にパスが変わることが考えられます。めんどいなぁ。
Visual C++ 2015 Update 2 以降のリンカにはスタティックライブラリの中身を(参照されていなくても)全て取り込む /WHOLEARCHIVE オプションがありますが、これをインクリメンタルリンクを行う /INCREMENTAL オプション(こっちはずっと前からある)と併用するとスタティックライブラリの中身を更新してもリンクされない(スタティックライブラリの中の新しいオブジェクトと入れ替わらない)という現象が発生するようです。
他にも気づいた人はいるようで、フォーラムに投稿した後にバグレポートは出ているようです。
デバッグビルドだとインクリメンタルリンクがオンになるんですが、オフにすっかなぁ…(オフならちゃんと期待したような動作になる)
GCC のインラインアセンブラでは出力 (output operands) リスト、入力 (input operands) リストの他に、アセンブラブロックの中でどのレジスタが破壊されるか(つまり、どのレジスタをコンパイラ側で復元しなければいけないか)を指定する 破壊 (clobber) リストを指定することができます。
Read the rest of this entry