Visual Studio2012を使用して基本的なC++プロジェクトを構築します。ソースファイルに変更を加えると、次のようになります。
- 対応するオブジェクトファイルがコンパイルされます
- コンパイラの.tlogファイルが更新されます
- PDBファイルが更新されます
- ただし、リンカの.tlogファイルは変更されません
- リンカは
All outputs are up-to-date.
、新しい実行可能ファイルを要求し、ビルドしません。
実行可能ファイルをビルドする唯一の方法は、実行可能ファイルを削除することです。追跡システムに何か問題があるようで、誰かがこの問題に光を当てることができるかどうか疑問に思いました。
2つのファイルを変更した後のmsbuildの出力は次のとおりです。フルパスとその他の一部を省略しています(この出力はVS2010ツールセット用ですが、2012は同じように動作します)。
1>Target "ClCompile" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.targets"...
Using "CL" task from assembly "Microsoft.Build.CppTasks.Win32, Version=4.0.0.0...
Task "CL"
Read Tracking Logs:
cl.read.1.tlog
CL.2520.read.1.tlog
...
Outputs for ....
XXX.OBJ
YYY.OBJ
...
xxx.cpp will be compiled as xxx.cpp was modified...
yyy.cpp will be compiled as yyy.cpp was modified...
Write Tracking Logs:
cl.write.1.tlog
CL.2520.write.1.tlog
...
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\CL.exe ....
Tracking command:
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\Tracker.exe ....
xxx.cpp
yyy.cpp
Done executing task "CL".
1>Done building target "ClCompile" in project "xxx.vcxproj".
ここまでは順調ですね。これで、リンカーが起動します(まあ、そうではありません)。
1>Target "Link" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.targets"....
Using "Link" task from assembly "Microsoft.Build.CppTasks.Win32, Version=4.0.0.0...
Task "Link"
Using cached output dependency table built from:
link.write.1.tlog
Using cached input dependency table built from:
ink.read.1.tlog
Outputs for ....
MY.EXE
MY.PDB
All outputs are up-to-date.
Done executing task "Link".
Task "Message"
xxx.vcxproj -> my.exe
Done executing task "Message".
1>Done building target "Link" in project "xxx.vcxproj".