2009-10-25 38 views
13

Tengo un proyecto de DLL Win32 en VS2008, está escrito en un puñado de módulos C.
Porque I también quiero ser capaz de construir fuera de VS2008, sin dependencia de VS2008, he producido un archivo MAKE personalizado, que hace todos los pasos de compilación y enlace. Todo esto está bien configurado.¿Puedo mezclar C++ y C en un solo proyecto en Visual Studio?

Ahora me gustaría agregar un par de módulos C++ a esta DLL. He modificado el archivo MAKE personalizado para compilar los módulos .cpp como C++, y los módulos .c como C (/ Tc) regular. Todo esto funciona Vincula todo junto, no hay problema.

¿Puedo configurar el proyecto VS2008 para que haga lo mismo?

¿Puedo mezclar C++ y C en el mismo proyecto VS2008?

¿O necesito un paso de compilación personalizado para esto?

Gracias.


RESPUESTA

que tenía el proyecto VS2008 establecido para compilar como C. necesitaba cambiar a los datos como "defecto". Haga clic derecho en el proyecto, seleccione Propiedades y, a continuación, ...:

alt text http://i33.tinypic.com/qqsd8g.jpg

Gracias, Pavel.

+0

Solo selecciono el archivo .c del Explorador de soluciones "Propiedades" -> luego compilo como código C. Y su trabajo: P – user956584

Respuesta

8

En primer lugar, ni siquiera debería necesitar /Tc si lo está construyendo usted mismo - cl.exe usa la extensión de archivo para determinar el tipo, por lo que los archivos .c se compilarán como C de forma predeterminada, y .cpp y archivos .cxx como C++.

Para proyectos VS, funciona exactamente de la misma manera, excepto que no puede anular este comportamiento (o al menos no sé cómo).

+1

Muy útil. Resulta que hay una opción en VS para establecer la opción "Compilar como", una de/Tc,/Tp o "predeterminada". Lo tenía configurado en/Tc. Necesitaba restablecerlo a "predeterminado". A-OK. – Cheeso

1

Deberían agregar bien, teniendo en cuenta que el compilador de Microsoft compilará ambos. Si los agrega al proyecto, pasarán al cl y creo que cl hace una elección de qué modo usar en función de la extensión del archivo. Estás usando .cpp, lo cual es bueno.

En resumen: Sí.

GCC hará esto también, por lo que su archivo MAKE debe ser razonablemente portátil.

+1

Tenga en cuenta que si está compilando C++ con 'gcc',' gcc' no puede agregar bibliotecas necesarias en la fase de enlace. El paso de enlace para un programa C++ siempre debe usar 'g ++', no 'gcc' – bdonlan

5

No hay problemas para mezclar C y C++ en el mismo proyecto. Todo lo que necesitará hacer para diseñar su interfaz entre los módulos C y C++ en términos de funciones C y estructuras de datos C, y luego asegurarse de que esas funciones de interfaz se declaren en el lado C++ con el especificador de enlaces C extern "C".

Cuestiones relacionadas