Visual Studio 2010で gtest をビルドしようとしています。ソリューションファイルを変換した後、ビルドしようとすると、次の警告メッセージが表示されます。
_Warning 1 warning MSB8012:
TargetPath(C:\Users\sucho\Desktop\gtest-1.5.0\msvc\gtest/Debug\gtest.lib) does not match
the Library's OutputFile property value (C:\Users\sucho\Desktop\gtest-1.5.0\msvc\gtest\
Debug\gtestd.lib).
This may cause your project to build incorrectly.
To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property
values match the value specified in %(Lib.OutputFile).
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets
_
このメッセージは、$(OutDir)
、$(TargetName)
、および$(TargetExt)
を、%(Lib.OutputFile)
で指定されたプロパティ値とともに設定する必要があることを示しています。
Visual Studio(特にVS 2010)でそれを行うにはどうすればよいですか?
警告は偽です-Google Testを使用していると仮定すると、うまく機能します
ただし、それをなくすことはできます。問題のプロジェクトを右クリックし、プロパティを選択します。左側のツリービューで[ライブラリアン]を選択し、出力ファイルの横にあるボックスをクリックして[親またはプロジェクトのデフォルトから継承]を選択して、右側の[出力ファイル]項目を変更します。
分かった。 gtestプロジェクト、プロパティ、構成プロパティ、一般を右クリックします。デバッグ構成が選択されていることを確認します(左上のコンボ)。 Target Nameプロパティを
$(ProjectName)d
名前をgtestからgtestdに変更するために追加された「d」に注意してください。それ以外の場合、警告は無害です。
誰も正しい答えはないと思います。私はこのように解決しました。プロジェクトのプロパティページで、linker->General->Output file
がconfiguration properties->General->target name
&configuration properties->General->target extension
と一致するかどうかを確認します。
「d」を追加する必要はありません。もちろん、3つの変数すべてについて、Inherit from parent or project defaults
に設定する方が簡単です。
例:
Linker → General → Output File = "myproject.exe"
次に:
Configuration Properties → General → Target Name = "myproject"
configuration properties → General → Target Extension = ".exe"
この種のエラーは通常、古いプロジェクトを新しいバージョンのVisual Studioにアップグレードする場合(VS2010の場合など)、およびプロジェクト設定が手動で変更された可能性がある場合(実行可能ファイル名の変更など)にも発生します。 VS2010がこれらのマクロ$(ProjectName)
$(TargetName)
$(OutDir)
$(TargetExt)
を使用してリリース/デバッグ出力を制御していることはわかっていますが、どこで変更するかはよくわかりません。通常は、プロジェクト>>プロパティを使用して出力ファイルの名前を直接変更します。これは、デバッグとリリースのビルド用に出力ファイルを個別に変更する必要があることを意味し、依存関係があった場合、This may cause your project to build incorrectly.
のようなエラーが発生します。
これらのマクロ/プロパティはVS2010のデフォルトですが、メモ帳で編集することにより、.vcprojファイルで自分で設定できます。最初に.vcprojファイルでプロパティを検索することに注意してください。プロパティが存在する場合は値を変更し、そうでない場合は以下のように定義します。
<PropertyGroup Label="My Values">
<ProjectName>New_Project_Name</ProjectName>
</PropertyGroup>
上記では、これらの値を保持するために新しい<property group>
を定義しましたが、どこにでも定義できます。デバッグ/リリース構成グループの直後にファイルの先頭でこれを定義して、どこからでも見えるようにします。プロジェクトのプロパティが正しく使用できるように正しく設定されていることを確認してください(VS2010のデフォルト設定が正しいはずです)。それらを変更した場合は、新しいテストプロジェクトからコピーする必要があります。もちろん、上記のグループで値を設定したい他のマクロを追加することもできます。
プロジェクトのプロパティを使用して、このマクロの新しい値を確認することもできます。たとえば、[構成プロパティ] >> [全般]をクリックし、[ターゲット名]ボックスをクリックします。編集を選択します。ボタン'MACROS >>'
が付いたダイアログボックスが表示されます。それをクリックすると、各マクロの値が表示されます。 .vcprojファイルに設定した新しい値を正しく反映する必要があります。
Visual Studio 2019でアプリケーションをコンパイルしようとしていましたVisual Studio 2005。同じ警告が出ました。
私は自分が何をしたかを視覚的にスクリーンショットで示すと思いました。
ご覧のとおり、変数は両方ともImport Textに設定されています。
私の問題を解決するには、$(TargetName)
をImportTextに設定するだけで済みます。ただし、これらの値はそのままにしておきます。
これは私が出力ファイルを設定した方法です:
ImportTextとして出力ターゲット名をオーバーライドしたことに注意してください。これは10年以上前のことで、あまり経験がありませんでした。
したがって、ここで同じ調整を行うだけで済みました。
これでファイルをコンパイルします。
これの背景は、Microsoftが$(TargetName)マクロの意味を変更したことです。これは、「リンカーに付けたファイル名|出力ファイルから拡張子を除いたもの」を意味するものでした。彼らはそれを「デフォルトではプロジェクトの名前」に変更しました。 (これは、私の見解では、決してしてはいけないことです。新しいマクロが追加されているはずです)。
VS2008以前では、リンカー設定からファイル名を解析できましたが、新しいバージョンへの移行時にファイル名を解析できなかったため、構成が壊れたままになっています。
警告自体はおそらく重要ではありませんが、$(TargetName)を使用する場合、たとえば、それをバッチファイルに渡すと、この変更によりバッチプロセスが中断されます。
私たちにとっての解決策は、リンカーからファイル名(マイナスの拡張子)をコピーすることです。一般への出力ファイル|ターゲット名、次にリンカーを設定します。 「親/デフォルトから継承」する出力ファイル。これは、「d」(デバッグ用)、Unicodeの「u」、64ビットの_64などのサフィックスを使用しているためです。
一方、出力ファイルが常にプロジェクトの名前と一致する場合は、リンカーを設定するだけです。 「デフォルトを継承」する出力ファイルを作成すると、原則として完了です。コンパイル済みファイルに必要な出力ディレクトリがGeneral |出力ディレクトリ。
この変更は、文字通り何百もの設定を移動する必要があるため、絶対に腹立たしいことです。すべて、Microsoft側の非常に怠惰なためです。
Hans Passantが投稿したように、TargetNameプロパティを手動で変更する必要があります。これは、VS2005/2008とVS2010の間で異なります。参照してください http://social.msdn.Microsoft.com/Forums/en-US/vcprerelease/thread/3c03e730-6a0e-4ee4-a0d6-6a5c3ce4343c