Зависимость от DLL до собственной библиотеки импорта, как избежать? - PullRequest
3 голосов
/ 14 ноября 2011

Я собираю библиотеку прокси / заглушки из файла IDL, и по какой-то причине драйвер сборки полагает, что библиотека импорта, сгенерированная во время ссылки, является входным файлом для ссылки, вызывая каждый раз пересвязку проекта (имена путей сокращены для удобства чтения):

10:05:33.764 1>
Target "Link: (TargetId:66)" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets" from project "[...]\VersionControl.vcxproj" (target "_Link" depends on it):
Using "Link" task from assembly "Microsoft.Build.CppTasks.Win32, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
Task "Link" (TaskId:26)
    Write Tracking Logs: (TaskId:26)
[...]
    Outputs for [...]\DEBUG\DLLDATA.OBJ|[...]\DEBUG\VERSIONCONTROL.DLL.EMBED.MANIFEST.RES|[...]\DEBUG\VERSIONCONTROL_I.OBJ|[...]\DEBUG\VERSIONCONTROL_P.OBJ: (TaskId:26)
    [...]\DEBUG\VERSIONCONTROL.ILK (TaskId:26)
    [...]\DEBUG\VERSIONCONTROL.DLL (TaskId:26)
    [...]\DEBUG\VERSIONCONTROL.DLL.INTERMEDIATE.MANIFEST (TaskId:26)
    [...]\DEBUG\VERSIONCONTROL.PDB (TaskId:26)
    Inputs for [...]\DEBUG\DLLDATA.OBJ|[...]\DEBUG\VERSIONCONTROL.DLL.EMBED.MANIFEST.RES|[...]\DEBUG\VERSIONCONTROL_I.OBJ|[...]\DEBUG\VERSIONCONTROL_P.OBJ: (TaskId:26)
    [...]\LIB\RPCRT4.LIB (TaskId:26)
    [...]\LIB\KERNEL32.LIB (TaskId:26)
    [...]\LIB\USER32.LIB (TaskId:26)
    [...]\LIB\GDI32.LIB (TaskId:26)
    [...]\LIB\WINSPOOL.LIB (TaskId:26)
    [...]\LIB\COMDLG32.LIB (TaskId:26)
    [...]\LIB\ADVAPI32.LIB (TaskId:26)
    [...]\LIB\SHELL32.LIB (TaskId:26)
    [...]\LIB\OLE32.LIB (TaskId:26)
    [...]\LIB\OLEAUT32.LIB (TaskId:26)
    [...]\LIB\UUID.LIB (TaskId:26)
    [...]\LIB\ODBC32.LIB (TaskId:26)
    [...]\LIB\ODBCCP32.LIB (TaskId:26)
    [...]\DEBUG\VERSIONCONTROL.DLL.EMBED.MANIFEST.RES (TaskId:26)
    [...]\DEBUG\DLLDATA.OBJ (TaskId:26)
    [...]\DEBUG\VERSIONCONTROL_I.OBJ (TaskId:26)
    [...]\DEBUG\VERSIONCONTROL_P.OBJ (TaskId:26)
    [...]\SYSTEM32\TZRES.DLL (TaskId:26)
    [...]\SORTING\SORTDEFAULT.NLS (TaskId:26)
    [...]\DEBUG\VERSIONCONTROL.EXP (TaskId:26)
    [...]\DEBUG\VERSIONCONTROL.LIB (TaskId:26)
    [...]\VERSIONCONTROL.DEF (TaskId:26)
    [...]\LIB\MSVCRTD.LIB (TaskId:26)
    [...]\LIB\OLDNAMES.LIB (TaskId:26)
    Source compilation required: input [...]\DEBUG\VERSIONCONTROL.LIB is newer than output [...]\DEBUG\VERSIONCONTROL.DLL. (TaskId:26)

Проект настроен как обычный проект DLL с настройками по умолчанию.Любая идея, почему MSBuild решает, что эти сгенерированные файлы должны рассматриваться как входные данные, и как я могу это исправить?

1 Ответ

0 голосов
/ 17 ноября 2011

Это выстрел в темноте, но стоит посмотреть ...

Откройте файл vcxproj и найдите элемент @ (Midl).Измените его, попробовав один из этих трех фрагментов метаданных элемента, и посмотрите, как меняется поведение. Это может привести вас на правильный путь:

  <Midl Include="My.idl">
    <LinkCompiled>false</LinkCompiled>
    <LibCompiled>false</LibCompiled>
    <ImpLibCompiled>false</ImpLibCompiled>
  </Midl>
...