Как исправить предупреждение MSB8012 в проекте статической библиотеки в Visual C++ 2010?
Я пытаюсь преобразовать статическую библиотеку из VC++2008 в VC++2010, и я получаю эти предупреждения о TargetPath и TargetName. Я посмотрел на мою конфигурацию, и я не уверен, как заставить их уйти. Это серьезно или это просто игнорируемое предупреждение для статической библиотеки, которую я обычно собираю один раз и редко перестраиваю.
Я думаю, что это как-то связано с тем, что проект называется itk32, но отладочная версия библиотеки называется itk32d.lib, и старый способ настройки этого в эпоху Visual C++ 6.0 привел к некоторому странному Настройки остаются в проекте vc2010, который был недавно преобразован из VC6 в 2008, а сейчас я преобразую в 2010:
1>------ Build started: Project: Itk32, Configuration: Debug Win32 ------
1>...\Microsoft.CppBuild.targets(1151,5): warning MSB8012: TargetPath(C:\...\Libraries\Itk\.\Debug\Itk32d.lib.lib) does not match the Library's OutputFile property value (C:\...\Libraries\Itk\Debug\Itk32d.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. Они проделали довольно хорошую работу, чтобы сделать эти невидимые старые проекты, как правило, очень хорошими. Но есть несколько мест, где вы можете столкнуться с проблемами при импорте старых проектов. Вот что говорит это предупреждение.
Использование компоновщика General + Output File для указания имени выходного файла является одной из таких проблем. На самом деле не уверен, что может пойти не так, возможно, это связано с проверкой зависимостей. Значением по умолчанию для него является $(OutDir)$(TargetName)$(TargetExt). Поэтому наилучшим способом переименования выходного файла является изменение значения макроса $ (TargetName).
Который доступен на главной странице общего назначения в качестве параметра "Имя цели". Его не было в более ранних версиях VS. Так что поменяйте его на "itk32d". Или лучше $(ProjectName)d. И сбросьте настройки компоновщика.
У меня была эта проблема, но я не смог найти правильный ответ здесь, в SO, в конце концов я обнаружил, что она была решена путем исправления Промежуточного каталога с ". \ Debug" на ".. \ Debug" и ".\Release" на "..\Release"в каждой конфигурации сборки.
Извините, это стоит только за комментарий, но у меня недостаточно очков, чтобы добавлять комментарии к постам других людей.
У меня возникла похожая проблема, но я смог решить проблему изменения параметра $(ConfigurationName) с помощью соглашения предыдущей версии на $(Configuration). Я не представлял себе такую вещь, но когда я проверил это, соглашение об именах изменилось и реинтерпретация в основном работает и там, но за немногими вещами она не полностью интерпретируется, и это было причиной..