Visual Studio 2010 и 2008 не может обрабатывать исходные файлы с одинаковыми именами в разных папках?

Прямой вопрос: Если у меня есть два файла с одинаковым именем (но в разных каталогах), кажется, что только Visual Studio 2005 может с этим справиться прозрачно ?? VS 2008 и 2010 требуют тонкой настройки? Помимо моего соглашения об именах, я что-то делаю не так?

Справочная информация:

Я разрабатываю статистические библиотеки C ++ ... У меня две папки:

/ Univariate

Normal.cpp
Normal.h
Beta.cpp
Beta.h
Adaptive.cpp
Adaptive.h

/ Multivariate

Normal.cpp
Normal.h
Beta.cpp
Beta.h
Adaptive.cpp
Adaptive.h

Мне нужно поддерживать кросс-компиляцию - я использую g ++ / make для компиляции этих же файлов в библиотеку в Linux. Они работают отлично.

Я использовал Visual Studio 2005 без проблем, но мне нужно перейти на Visual Studio 2008 или 2010 (в настоящее время пускает слюни на инструмент nsight от nVidia). Однако у меня возникают проблемы, если я добавляю файлы в проект с тем же именем (даже если они находятся в другом каталоге). Я хочу изменить свое соглашение об именах, но я Мне любопытно, сталкивались ли другие с этой проблемой и нашли ли хорошо задокументированные решения ??

Меня еще больше сбивает с толку тот факт, что если я обновлю проекты 2005 года до проектов 2010 года, окажется, что VS 2010 может правильно обрабатывать два исходных файла с одинаковым именем в разных каталогах; однако, если я удалю один из повторяющихся файлов, а затем добавлю его обратно в проект, меня встретит следующее предупреждение:

Distributions \ Release \ Adaptive.obj: предупреждение LNK4042: объект указан более одного раза; extras ignored

Теперь у меня есть промежуточный каталог, указанный как $ (ProjectName) \ $ (Configuration) - мне нужно, чтобы мои объектные файлы находились в другом месте от моего исходного дерева. Итак, я могу понять, почему он копирует объектные файлы друг на друга, но когда проекты конвертируются из 2005 в 2008 или 2010, добавляется набор условных компиляций:

<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>

Они доступны на странице свойств исходного файла в C / C ++ -> Выходные файлы -> «Имя файла объекта» & » Имя файла XML-документации ". Но если я просто добавлю файл напрямую (или удалю и снова добавлю их), VS не будет жаловаться, пока я не попытаюсь скомпилировать, но также никогда не добавит условные директивы - поэтому, чтобы все работало правильно, я должен сам добавляю условные директивы для каждой конфигурации. Я делаю ошибку / неверное предположение или обнаружил действительную ошибку в VS 2008/2010?

54
задан M. Tibbits 16 September 2010 в 07:17
поделиться