Странное «предупреждение LNK4042» в Visual Studio 2010

Меня только что избили (довольно сильно) по голове каким-то нетривиальным предупреждением из Visual Studio 2010 (C ++).

Компиляция дала следующий вывод:

1 Debug \ is.obj: предупреждение LNK4042: объект указан более одного раза; дополнения игнорируются
1 Debug \ make.obj: предупреждение LNK4042: объект указан более одного раза; дополнения игнорируются
1 Debug \ view.obj: предупреждение LNK4042: объект указан более одного раза; дополнения игнорируются
1 identity.obj: ошибка LNK2019: неразрешенный внешний символvoid __cdecl test::identity::view(void) (? view @ identity @ test @@ YAXXZ) упоминается в функцииvoid __cdecl test::identity::identity(void) (? Тождественное @ 0test @@ YAXXZ)
1 identity.obj: ошибка LNK2019: неразрешенный внешний символvoid __cdecl test::identity::make(void) (? make @ identity @ test @@ YAXXZ) упоминается в функцииvoid __cdecl test::identity::identity(void) (? Тождественное @ 0test @@ YAXXZ)
1 range.obj: ошибка LNK2019: неразрешенный внешний символvoid __cdecl test::range::is(void) (? is @ range @ test @@ YAXXZ) ссылка на функциюvoid __cdecl test::range::range(void) (? Диапазон @ 0test @@ YAXXZ)

Ошибки компоновщика всегда трудны для отладки ... но были неразрешенные ссылки, и поэтому я проверил ... но источник хорошо сформирован ... и, наконец, он поразил меня:

Моя иерархия папок выглядит так:

src/
  identity/
    is.cpp
    make.cpp
    view.cpp
  range/
    is.cpp
    make.cpp
    view.cpp

как и иерархия в решении (я всегда настраивал ее так, чтобы она имитировала «настоящую» структуру папок).

И диагностические выводы:

Debug\is.obj
Debug\make.obj
Debug\view.obj

Вместе с предупреждением о том, что.obj был дважды передан компоновщику, и этот будет проигнорирован.

Больше не нужно искать: Visual аккуратно сгладил иерархию папок и поэтому не может аккуратно скомпилировать исходный код.

На данный момент я просто думаю о переименовании файлов, которые должны охватить проблему ...

... но есть ли способ, чтобы Visual Studio НЕ сгладил иерархию файлов?

Ответы на вопрос(8)

Ваш ответ на вопрос