Прямой вопрос: Если у меня есть два файла с одинаковым именем (но в разных каталогах), кажется, что только Visual Studio 2005 может обрабатывать это прозрачно? VS 2008 и 2010 требуют кучу настройки? Помимо моего соглашения об именах, я делаю что-то неправильно?
Фон:
Я разрабатываю статистические библиотеки С++... У меня есть две папки:
/ 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 (в настоящее время слюни над nVidia nsight). Однако у меня возникают проблемы, если я добавляю файлы в проект с тем же именем (даже если они находятся в другом каталоге). Я хочу изменить свое соглашение об именах, но мне любопытно, если другие столкнулись с этой проблемой и нашли какие-либо документальные решения хорошо
Меня еще больше огорчает тот факт, что если я обновляюсь с проектов 2005 года до проектов на 2010 год, похоже, что VS 2010 способен правильно обрабатывать два исходных файла с одинаковым именем в разных каталогах; однако, если я удалю один из дубликатов файлов, а затем добавлю его обратно в проект, меня приветствует следующее предупреждение:
Распределения\Release\Adaptive.obj: предупреждение LNK4042: объект, указанный более одного раза; дополнительные функции игнорируются
Теперь у меня есть промежуточный каталог, указанный как $(ProjectName)\$(Конфигурация). Мне нужно, чтобы мои объектные файлы находились в другом месте из моего исходного дерева. Поэтому я могу понять, почему он копирует объектные файлы друг на друга, но когда проекты конвертируются с 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/С++ → Output Files → "Имя файла объекта" и "Имя файла документации XML". Но если я просто добавляю файл напрямую (или удаляю и повторно добавляю их), VS не жалуется, пока я не попытаюсь скомпилировать, но также никогда не добавляет условные директивы. Поэтому, чтобы все работало правильно, я должен добавьте условные директивы для каждой отдельной конфигурации. Я делаю ошибку/плохое предположение или я обнаружил действительную ошибку в VS 2008/2010?