web-dev-qa-db-ja.com

警告MSB8012:$(O​​utDir)、$(TargetName)、および$(TargetExt)プロパティ値が%(Link.OutputFile)で指定された値と一致することを確認してください

コードをビルドすると、次のエラーが発生します。

C:\ Program Files(x86)\ MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5):warning MSB8012:TargetPath(E:\ Study\FWIF\demola\ext-libs\libcommoncpp2- 1.6.0\w32\Debug\ccgnu2.dll)は、リンカーのOutputFileプロパティ値g\CapeCommon14.dll)と一致しません。これにより、プロジェクトが正しくビルドされない場合があります。これを修正するには、$(OutDir)、$(TargetName)、および$(TargetExt)プロパティ値が%(Link.OutputFile)で指定された値と一致することを確認してください。

私は誰かが何をすべきか知っていることを願っています。

30
Abdul Samad

プロジェクトを以前のバージョンからVisual Studio 2010にアップグレードしましたか?その場合、これはよく知られている問題です。

Visual Studio 2010 C++プロジェクトアップグレードガイド http://blogs.msdn.com/b/vcblog/archive/2010/03/02/visual-studio-2010-c-project-upgrade-guide.aspx =

アップグレード中の警告

変換中に遭遇する可能性のある一般的な警告の一部を以下に示します。

1)リンカー出力ディレクトリ

アプリケーションのアップグレード時に表示される可能性がある警告の1つはMSB8012:$(TargetPath)で、リンカーのOutputFileプロパティ値が一致しません。

  • MSB8012:$(TargetExt)( '.dll')は、プロジェクト構成 'Debug | Win32'のリンカーのOutputFileプロパティ値 'C:\ foo\Debug\MFCActiveX.ocx'( '.ocx')と一致しません。これにより、プロジェクトが正しくビルドされない場合があります。これを修正するには、$(TargetExt)プロパティ値が%(Link.OutputFile)で指定された値と一致することを確認してください。

  • MSB8012:$(TargetPath)( 'C:\ foo\Debug\MFCActiveX.dll')は、リンカーのOutputFileプロパティ値 'C:\ foo\Debug\MFCActiveX.ocx'( 'C:\ foo\Debug\MFCActiveXプロジェクト構成 'Debug | Win32'の.ocx ')。これにより、プロジェクトが正しくビルドされない場合があります。これを修正するには、$(TargetPath)プロパティ値が%(Link.OutputFile)で指定された値と一致することを確認してください。

    Link.OutputFileは、プロパティページの[リンカー]-> [一般]-> [出力ファイル]で定義された値です。デフォルトでは、その値は$(OutDir)$(TargetName)$(TargetExt)であり、$(TargetPath)の値と同じです。ただし、以前のバージョンからアプリケーションを変換する場合、Link.OutputFileを解析して$(TargetName)と$(TargetExt)の値を正確に把握する簡単な方法はありません。さまざまな方法でそれらを。これを回避するために、変換中にLinker.OutputFileの値を保持することにしました。変換後、$(TargetName)はデフォルトで$(ProjectName)になります。 $(TargetExt)は、デフォルトでアプリケーションタイプのデフォルトの拡張子になります。ダイナミックライブラリの場合は.dll、スタティックライブラリの場合は.lib、アプリケーションの場合は.exeです。 Link.OutputFile値は保持されます。 Link.OutputFileと$(TargetPath)が異なる場合、警告MSB8012が変換ログで発行されます。アプリケーションをビルドすると、同じ警告が表示されます。

    $(OutDir)、$(TargetName)、および$(TargetExt)は、「一般」プロパティページで、それぞれ「出力ディレクトリ」、「ターゲット名」、「ターゲット拡張」として公開されます。警告が表示されないように、これらのプロパティの値を手動で変更できます。

  • プロジェクトがインポートライブラリを生成する場合(リンカー->詳細->インポートライブラリ)、リンカーの出力ディレクトリがデフォルトの出力ディレクトリでない場合は、変換後にインポートライブラリの出力フォルダーも変更する必要があります。それ以外の場合、生成されたインポートライブラリは、リンカの出力とは異なるディレクトリにある可能性があります。

  • Debugging.Commandは、変換後にデフォルトの$(TargetPath)に設定されます。 F5(デバッグ)またはCtrl + F5(デバッグなしで開始)時に適切な実行可能ファイルが起動されるように、変更を加える必要がある場合があります。

27
Brown

こちらもご覧ください Stackoverflow MSB8012 。 VS2008 C++プロジェクトをVS2012に変換するときに私にとってうまくいったこと:ソリューションエクスプローラーでプロジェクトを右クリックし、ポップアップでプロパティを選択します:構成プロパティ、リンカー、一般。右側の[出力ファイル]を選択すると、ドロップダウンが表示され、親またはプロジェクトのデフォルトから固有を選択します。 [適用]をクリックします。これにより、デフォルトのリンカー設定が得られます:$(OutDir)$(TargetName)$(TargetExt)。プロジェクトを再ビルドすると、警告は表示されなくなります。

6
jdelange

デバッグDLLでも同じ問題が発生し、ベース名の末尾に "D"を付ける必要がありました。たとえば、foo.dll(Release)ですが、fooD.dll(Debug)です。 Debug-Configurationのリンカー設定で出力名を調整すると、醜いMSB8012警告が発生します。

Visual-Studio 2010で機能する唯一のソリューションは、Debug-ConfigurationのPostbuild-Eventのようです。

@echo off
echo Copying $(OutDir)$(TargetName)$(TargetExt) as $(TargetName)D$(TargetExt)
copy /Y $(OutDir)$(TargetName)$(TargetExt) $(OutDir)$(TargetName)D$(TargetExt)
4

実行可能ファイルの名前がプロジェクト名とは異なるシナリオがあり、プロジェクトのある場所とは異なる場所に実行可能ファイル/ dllをビルドする必要がありました。

1)デフォルトのプロジェクト名を別の名前に変更します。 General-> TargetName
<私の実行可能ファイル名>

2)実行可能ファイルをビルドする別の場所に出力します。 General-> OutputDirectory <ここに新しい場所が入ります>

3)リンカー設定を更新します。リンカー->一般的な新しい値:$(OutDir)$(TargetName)$(TargetExt)
これにより、1と2の新しい設定が適用されます。

3
VickyDaus

古いプロジェクトからVS 2010に変換した後も同じエラーが発生しました。

これを修正するために、同じタイプの空のプロジェクト(.dll、.lib、.exeなど)を作成しました。
次に、プロジェクトプロパティのデフォルト値を、出力ディレクトリ、中間ディレクトリ、出力ファイルのプロジェクトにコピーしました

1
sergtk

vcxprojファイルを手動で編集して、同様の問題を解決することができました。

OutDirおよびTargetName設定は、プロジェクトファイルの最後にありました。

   ...
      <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
        <OutDir>$(OUTPUT_DIRECTORY)\</OutDir>
        <IntDir>$(ProjectDir)\$(Configuration)\$(ProjectName)\</IntDir>
        <TargetName>$(ProjectName)</TargetName>
      </PropertyGroup>
   </Project>

ブロックをClCompileブロックの上に移動すると、問題が解決しました。

0
Synck