3

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".
4

1 に答える 1

1

プロパティ シートのすべてのオプションを 1 つずつ確認したところ、この問題の唯一の原因は、中間ディレクトリを別のドライブのディレクトリに設定していることにあるようです。ソース ビルドは常に %TEMP% で行い、ほとんどの場合、プロジェクトは別のドライブに存在します。

問題を再現する簡単な手順を含むバグレポートをここに提出してください。うまくいけば、これはすぐに修正されます。現在の解決策は、IntDir をプロジェクトと同じドライブのディレクトリに設定することです。

アップデート

この問題について提出されたバグ レポートは、「設計上」としてクローズされました。中間ディレクトリは、%TEMP%、%TMP%、またはそれらのサブディレクトリであってはならないようです。気がかりですが、少なくとも何が悪かったのかはわかります。

于 2012-08-30T12:42:16.197 に答える