Pregunta directa: Si tengo dos archivos con el mismo nombre (pero en directorios diferentes), parece que sólo Visual Studio 2005 puede manejar esto de forma transparente? VS 2008 y 2010 requieren un montón de ajustes? Aparte de mi convención de nomenclatura, ¿estoy haciendo algo mal?
Antecedentes:
Estoy desarrollando bibliotecas estadísticas en C++... Tengo dos carpetas:
/ 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
Necesito soportar compilación cruzada -- estoy usando g++/make para compilar estos mismos archivos en una librería en Linux. Funcionan perfectamente.
Yo había estado usando Visual Studio 2005 sin problemas, pero tengo que actualizar a Visual Studio 2008 o 2010 (actualmente babeando sobre la herramienta nsight de nVidia). Sin embargo, estoy teniendo problemas si agrego archivos a un proyecto con el mismo nombre (incluso si están en un directorio diferente). Estoy dispuesto a cambiar mi convención de nomenclatura, pero tengo curiosidad si otros se han encontrado con este problema y han encontrado alguna bien soluciones documentadas
Estoy aún más desconcertado por el hecho de que si actualizo de 2005 proyectos a proyectos de 2010, parece que VS 2010 es es capaz de manejar correctamente dos archivos fuente con el mismo nombre en directorios diferentes; sin embargo, si elimino uno de los archivos duplicados y luego lo añado de nuevo al proyecto me encuentro con la siguiente advertencia:
Distribuciones \Release\Adaptive.obj : advertencia LNK4042: objeto especificado más de una vez; extras ignorados
Ahora tengo el directorio intermedio especificado como $(ProjectName)\$(Configuration) -- Necesito tener mis archivos objeto en una ubicación diferente de mi árbol fuente. Así que puedo ver por qué está copiando los archivos de objetos en la parte superior de uno al otro, pero cuando los proyectos se convierten de 2005 a 2008 o 2010, un montón de compilaciones condicionales se añaden:
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
Estos son accesibles desde la página de Propiedades del archivo fuente en C/C++ -> Output Files -> "Object File Name" & "XML Documentation File Name". Pero si simplemente añado el archivo directamente (o lo quito y lo vuelvo a añadir), VS no se queja hasta que intento compilar, pero tampoco añade nunca las directivas condicionales -- Así que para que las cosas funcionen correctamente, tengo que añadir yo mismo las directivas condicionales para cada configuración. ¿Estoy cometiendo un error o he descubierto un error válido en VS 2008 / 2010?