2010-09-24 8 views
7

Estoy comenzando un proyecto de C++ que me gustaría compilar igualmente bien en Eclipse (Linux) y vs2010 desde el mismo repositorio y podría necesitar ayuda para comenzar. Si bien muchos de los aspectos pueden ser individualmente Google'd, esperaba consejos sobre cómo abordar el problema en su conjunto.Comenzando con un proyecto de C + + de plataforma cruzada

Por ejemplo, dónde guardar las fuentes de la biblioteca, cómo estructurar el archivo make y cómo integrar googletest (encontrar un tutorial de novato solo en googletest es difícil). Un enlace a un tutorial que aborde estos aspectos sería genial, o una serie de tutoriales que juntos podrían ayudar.

Mi experiencia es en C# y trato de mantener la "limpieza" y la organización de mis proyectos de VS.

+0

¿Quiere decir compatibilidad entre VS2010 en Windows y Eclipse en Linux? Eclipse es en sí mismo un IDE muy multiplataforma. – Reinderien

+0

Sí, gracias por preguntar Eclipse se ejecuta en Linux (OpenSuse 11.3) – ccook

Respuesta

13

He realizado proyectos multiplataforma que utilizan los sistemas de compilación "nativos" en ambas plataformas (archivos vsproj en Windows y makefiles en Linux), pero definitivamente fue una molestia mantener ambos archivos de proyecto. Entonces, sí, estoy de acuerdo con las otras sugerencias de que debería intentar comenzar con una sólida utilidad de compilación multiplataforma. CMake o posiblemente Boost build parecen opciones decentes, probablemente haya muchas más.

Cuando se trata de bibliotecas de terceros, querrá apegarse a cosas que son sólidamente probadas multiplataforma. Boost es la mejor biblioteca de propósito general para C++ (sí, lo ve mencionado aquí en casi todos los hilos de C++ ... pero eso es porque realmente es una buena colección de cosas útiles). En cuanto a XML, HTTP, bibliotecas de imágenes, interfaz de usuario, hay todas buenas opciones de plataformas cruzadas, simplemente mire a su alrededor o pregunte si tiene requisitos específicos. Hagas lo que hagas, no uses alguna biblioteca de CodeProject u otro sitio orientado a MS que solo haya sido probado con Visual Studio 6, eso solo te llevará al sufrimiento. La mayoría de las libs de GNU se basan en Windows en estos días, por lo que debería estar razonablemente seguro con esas cosas.

Aunque le resultará tentador, intente minimizar la plataforma #ifdefs en su código; prefiera en su lugar abstraer cualquier elemento específico de la plataforma en una biblioteca siempre que sea posible.

¡Buena suerte!

+0

desearía poder hacer más de un upvote – Tim

+0

Con respecto a '# ifdef's vs. bibliotecas separadas - no es irrazonable poner código común en una clase base en una biblioteca, luego extender eso clase para separar las clases secundarias específicas de la plataforma que varían el comportamiento específico de la plataforma mediante el uso de polimorfismo. Entonces, los únicos '# ifdef's necesarios son para gobernar qué clase secundaria se usa. – Reinderien

+0

En cuanto a las bibliotecas ifdef/separadas, también puede tener un archivo de encabezado común, luego dividir los archivos fuente con parte del origen en una cpp compartida y parte del origen en archivos específicos de la plataforma que solo se compilan en el sistema apropiado. –

4

Una cosa que podría sugerirte si vas a una plataforma cruzada y quieres que todo esté lo más "limpio" posible: Centraliza tu sistema de compilación con una herramienta moderna de construcción multiplataforma como Scons. Está escrito en Python, es bastante conciso y poderoso, y funciona en todas partes.

O, si es fanático de Eclipse, simplemente instale Eclipse tanto en Windows como en GNU/Linux. Como mencioné anteriormente, es multiplataforma, y ​​puede hacer que funcione para compiladores en todo tipo de sistemas diferentes.

+0

Parece prometedor, pero ¿qué tan difícil será implementarlo? Me envolví en make – ccook

+3

En mi humilde opinión, hacer sintaxis es terriblemente hacky. Si lees sobre su historia, nunca fue realmente una solución de construcción pública a gran escala. Es difícil de escalar, es difícil de mantener y tiene una muy mala capacidad humana. Solo mire la cantidad de herramientas que acumulan ofuscación además de la ofuscación (automake y sus parientes). Por otro lado, Scons es simplemente Python, y está bien documentado con muchos ejemplos. – Reinderien

+0

@ccook: SCons es mucho más automatizado, y como tiene toda la potencia de python, puede usar 'glob.glob' y' os.listdir' para obtener la lista de archivos en un directorio, evitando así mantener la lista de archivos ... –

Cuestiones relacionadas