tools plugin para oxygen instalar development configurar configurando compilador cdt c++ eclipse build makefile

c++ - plugin - Construyendo múltiples binarios dentro de un proyecto de Eclipse



install c++ eclipse oxygen (3)

¿Cómo puedo hacer que Eclipse construya muchos binarios a la vez dentro de un proyecto (sin escribir un Makefile a mano)?

Tengo un proyecto CGI que da como resultado que se ejecuten varios programas .cgi en el servidor web, además de varias bibliotecas utilizadas por ellos. El Makefile hecho a mano usado para construirlo lentamente se vuelve inigualable. Usamos la "compilación interna" de Eclipse para compilar todos los demás proyectos y preferiríamos usarlo aquí también, pero por el bien de mí, no puedo encontrar la forma de hacer que Eclipse genere múltiples programas pequeños como resultado en lugar de vincular todo. en un binario.


Hay una forma de usar buildconfiguration s para crear un binario (o biblioteca compartida, en mi caso) de cada configuración de compilación. Usando la respuesta anterior, esto significa excluir manualmente todo el archivo principal, excepto el efectivo, de cada configuración de compilación.

Solo usé las respuestas anteriores para facilitar el trabajo en mi proyecto de eclipse que crea 14 bibliotecas compartidas a través de 14 configuraciones de compilación. Sin embargo, configurar la configuración individual de "excluir de la compilación" fue bastante engorroso, así que cambié a usar el siguiente código que se basa en una preprocessor-directive como mi archivo principal completo:

/* *main.cpp */ /* Within * Project | Properties | C/C++-Build | Settings * | GCC C++ Compiler | Preprocessor * set the following defined Symbol: * _FILENAME=${ConfigName} */ #define __QUOT2__(x) #x #define __QUOT1__(x) __QUOT2__(x) #include __QUOT1__(_FILENAME.cpp) #undef __QUOT1__ #undef __QUOT2__ /* The above include directive will include the file ${CfgName}.cpp, * wherein ${CfgName} is the name of the build configuration currently * active in the project. * * When right clicking in * Project Tree | (Project) * and selecting * Build Configuration | Build all * this file will include the corresponding .cpp file named after the * build config and thereby effectively take that file as a main file. * * Remember to exclude ALL ${CfgName}.cpp files from ALL build configurations. */

Tenga en cuenta que no hace nada más que incluir otro archivo .cpp cuyo nombre se deduce del preprocessor y un símbolo que se establece en las opciones del compilador. El símbolo es $ {CfgName} y será reemplazado por el nombre de configuración actual por eclipse automáticamente.

No es necesario configurar uno, qué archivo se incluye en qué configuración de compilación. Simplemente excluya todos los archivos $ {CfgName} .cpp en cada compilación e incluya main.cpp en cada compilación.

PD: la respuesta del aerodeslizador me dio la idea de tener un archivo principal que no contenga código por sí solo. Si uno incluye código compartido de los diferentes archivos principales efectivos $ {CfgName} .cpp, trabajar en su código puede resultar inviable porque los archivos de encabezado en main.cpp no ​​serán visibles en ellos. Hice esto hasta ayer, pero mantener el código con un índice roto, etc. fue un gran dolor.

PPS: este procedimiento actualmente rompe la reconstrucción automática del archivo principal si solo se cambió el archivo .cpp incluido. Parece que eclipse no reconoce los cambios en $ {CfgName} .cpp (que está excluido de la compilación). Por lo tanto, se requiere una reconstrucción manual después de cada cambio. Esto me está molestando actualmente;)


La solución para esto se describe allí: http://tinyguides.blogspot.ru/2013/04/multiple-binaries-in-single-eclipse-cdt.html . Hay un extracto:

  1. Crear un proyecto administrado (Archivo> Nuevo proyecto de C ++> Ejecutable)
  2. Agregue el código fuente que contiene múltiples funciones main ()
  3. Vaya a Proyecto> Propiedades> C / C ++ General> Ruta y símbolos> Gestionar configuraciones
  4. Cree una configuración de compilación para cada ejecutable y asígnele un nombre apropiado (puede clonar configuraciones existentes como Debug y Release).
  5. Desde el explorador del proyecto, haga clic con el botón derecho en cada archivo fuente que contenga una función main ()> Configuraciones de recursos> Excluir de la compilación y excluya todas las configuraciones de compilación, excepto la que construye el ejecutable con esta función main ()
  6. El resto del código se incluye en todas las configuraciones de compilación de forma predeterminada. Es posible que deba cambiar esto según su aplicación.
  7. Ahora puede crear un ejecutable para cada función principal yendo a Proyecto> Crear configuraciones> Establecer activo, Proyecto> Crear proyecto

Usar Eclipse como su sistema de compilación para el código de producción parece ser una mala idea en general. Creo que es un gran IDE y lo he usado ampliamente para proyectos Java y C ++, pero para un sistema de compilación creo firmemente que Ant, make y otras utilidades de compilación dedicadas son el camino a seguir.

Hay varias razones para esto:

  • Las utilidades de compilación dedicadas ofrecen la misma flexibilidad que busca para generar múltiples destinos ejecutables.

  • Hormiga y haga que el soporte sea la mayoría de las cadenas de procesos de construcción arbitrarias (aunque no del todo).

  • Es probable que una utilidad de compilación dedicada ofrezca mayor estabilidad y compatibilidad con versiones anteriores para los formatos de archivo de descripción de compilación que una herramienta IDE como Eclipse. Además, estoy bastante seguro de que la función de compilación interna de Eclipse depende de la descripción del archivo ".project", y el formato de este último probablemente no sea tan estable como el formato de descripción de compilación para Ant o make.

  • Las utilidades de compilación básica de uso general generalmente se basan en la línea de comandos, lo que facilita su integración con utilidades de compilación más sofisticadas y de mayor nivel para la gestión de compilación automatizada como Pulse, CruiseControl, etc.

La necesidad que motiva su pregunta es decirle que es hora de cambiar a una herramienta de compilación mejor.