Как исправить предупреждение MSB8012 в проекте статической библиотеки в Visual C++ 2010?

Я пытаюсь преобразовать статическую библиотеку из VC++2008 в VC++2010, и я вам эти предупреждения о TargetPath и TargetName. Я заглянул в свою конфигурацию и я не знаю, как это сделать. Это серьезно или это просто игнорируемое предупреждение для статической библиотеки, которую я обычно строю один раз и редко перестраиваю.

Я думаю, что это связано с тем, что проект называется itk32, но отладочная версия библиотеки называется itk32d.lib, и старый способ, которым это настроено в Visual C++ 6.0 era, привел к каким-то странным настройкам, остающимся в vc2010 проект, который был преобразован некоторое время назад из VC6 в 2008, и теперь я конвертирую в 2010:

1>------ Build started: Project: Itk32, Configuration: Debug Win32 ------
1>...Microsoft.CppBuild.targets(1151,5): warning MSB8012: TargetPath(C:...LibrariesItk.DebugItk32d.lib.lib) does not match the Library's OutputFile property value (C:...LibrariesItkDebugItk32d.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).
1>...Microsoft.CppBuild.targets(1153,5): warning MSB8012: TargetName(Itk32d.lib) does not match the Library's OutputFile property value (Itk32d). 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).
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

3 ответов


система сборки была значительно переработана в VS2010, теперь она использует MSBuild вместо пользовательской системы VCBuild. Та же система сборки, используемая другими языками, поддерживаемыми VS. Они проделали довольно хорошую работу, чтобы сделать эти невидимые, старые проекты обычно строятся просто отлично. Но есть несколько мест, где вы можете попасть в беду, когда вы импортируете старые проекты. Вот что говорит это предупреждение.

используя параметр общего + выходного файла компоновщика, чтобы назвать выходной файл это одна из таких проблем. Не совсем уверен, что может пойти не так, это, вероятно, связано с проверкой зависимостей. Значение по умолчанию для него - $(OutDir)$(TargetName)$(TargetExt). Поэтому лучший способ переименовать выходной файл-изменить значение макроса $(TargetName).

, который доступен на главной странице как "имя" настройки. Он не существовал в более ранних версиях VS. Поэтому измените это на "itk32d". Или лучше, $(ProjectName) d. И сбросить настройка компоновщика.


У меня была эта проблема, но я не мог найти правильный ответ здесь в SO, в конце концов я узнал, что она была решена путем исправления Промежуточный Каталог from ".\Debug "to"..\Отладка и." \ Отпустите" to"..\Release " в каждой конфигурации сборки.

Мне жаль, что это стоит только для комментария, но у меня недостаточно очков, чтобы добавить комментарии к сообщениям других людей.


испытали аналогичную проблему, но я смог решить изменение $(ConfigurationName) параметра, используя соглашение предыдущей версии до $(Configuration).. Я бы не представлял себе такую вещь, но когда я проверил, что это так, соглашение об именах изменяется, и повторная интрепретация в основном работает, и там, но для немногих вещей она не полностью интерпретируется, и это было причиной..