Crear un nuevo proyecto de C ++ en Eclipse CDT con la misma configuración que otro proyecto

¿Existe alguna manera directa de crear un nuevo proyecto de C ++ que clone la configuración de un proyecto existente? Al desarrollar C ++, me gusta escribir muchas pequeñas pruebas y ejemplos, pero si mi código depende de bibliotecas externas, como a menudo lo hacen, tengo que configurar las inclusiones, bibliotecas, configuraciones del comstackdor, etc., desde cero cada vez. ¿Hay algún tipo de mecanismo de plantilla?

Sé acerca de la exportación / importación de C / C ++ Project Settings. Sin embargo, esto solo parece incluir rutas de acceso y #defines para la comstackción de C ++. El hecho de que no exporta toda la lista de configuraciones (opciones de comstackción, configuración de advertencia, opciones de enlazador, bibliotecas, rutas de biblioteca, …) realmente limita su utilidad.

Además, debe hacerlo por separado para cada configuración de ejecución, aunque esto es un inconveniente menor.

A lo que suelo recurrir es a copiar un proyecto de prueba y editar manualmente los archivos .project y .cproject y luego reemplazar y .cproject los archivos. Pero esto parece un truco propenso a errores.

¿Hay otros enfoques? ¿Debo cambiar a un sistema de construcción separado y generar los proyectos de eclipse externamente para tener lo que parece ser una funcionalidad bastante básica?


ACTUALIZAR

Intenté crear un proyecto de complemento, pero las instrucciones dejan mucho que desear si no lo has hecho antes. Definitivamente quiero descubrir cómo hacer esto.

Copié y modifiqué la plantilla de muestra de formas muy simples, solo para comenzar, pero las instrucciones “Cómo registrar una plantilla de proyecto con CDT” me perdieron desde el principio: “1. Cree un proyecto de complemento vacío desde el Eclipse banco de trabajo sin las carpetas de origen “. Supongo que esto requiere instalar el PDE, lo cual hice, pero luego estoy perdido. Intenté “Archivo / Nuevo / Proyecto de complemento”, deseleccioné “Crear un proyecto de Java” (asumí que esto era lo que significaba “Vacío”). Esto crea un proyecto que todavía tiene muchas cosas en él. Luego creé los subdirectorios como se describe en el paso 2, pero no puedo entender cómo mostrarlos en Eclipse y, como resultado, no puedo buscar el archivo XML de la plantilla en el paso 11. Además, en los pasos 9 / 10, no obtengo una plantilla ‘literalmente nombrada’ (plantilla) ”, sino que crea una con el nombre completo de mi proyecto de plantilla.

CDT tiene un mecanismo completo de Templating para crear nuevos proyectos.

Básicamente, extiende el punto de extensión org.eclipse.cdt.core.templates y apunta a un archivo template.xml que tiene varios comandos que puede hacer. No necesita escribir ningún código Java para esto, pero sí necesita crear un proyecto de complemento.

El tipo de cosas que puedes hacer:

  • Crear carpetas
  • Agregar archivos a un proyecto
  • Establezca la configuración de comstackción administrada (esta es la más relevante porque puede establecer opciones de comstackción y agregar bibliotecas, etc.)
  • Agregue páginas adicionales al asistente de proyecto nuevo para solicitar información adicional al usuario

La documentación de Eclipse tiene una sección especial que detalla cómo hacerlo aquí: http://help.eclipse.org/mars/topic/org.eclipse.cdt.doc.isv/guide/projectTemplateEngine/index.html

El proyecto Hello World que viene con CDT tiene su plantilla aquí: https://github.com/eclipse/cdt/blob/master/build/org.eclipse.cdt.managedbuilder.gnu.ui/templates/projecttemplates/HelloWorldCAnsiProject/template .xml

Una pequeña nota, si inicialmente creas tu complemento para instalarlo como un complemento no empaquetado, puedes editarlo en su lugar, agregar nuevas plantillas o editar la que ya has hecho.

Yendo más lejos, puede compartir este proyecto de complemento de plantilla con su equipo y todos se benefician al tener esta característica.

Paso a paso

El proceso paso a paso para hacer esto (probado en Eclipse Mars.1 con las herramientas de desarrollo CDT y Plug-in instaladas más un editor XML para editar el template.xml)

  1. Crear un proyecto de complemento ( File | New | Other... | Plug-in project )

paso 1

  1. Complete el nombre del proyecto y presione Next / Finish hasta que finalice

paso 2

Ahora debería tener archivos en su disco que se vean así en el proyecto que creó:

 $ find . -type f ./.classpath ./bin/com/example/cdt/templates/Activator.class ./.project ./src/com/example/cdt/templates/Activator.java ./.settings/org.eclipse.jdt.core.prefs ./META-INF/MANIFEST.MF ./build.properties 
  1. Abra el plugin.xml y haga lo siguiente
    1. Seleccione la pestaña Extensions
    2. Presione Agregar
    3. Escriba el punto de extensión org.eclipse.cdt.core.templates
    4. Desmarque la checkbox Show only extension points [...]
    5. Seleccione el org.eclipse.cdt.core.templates de la lista
    6. Presione Finish
    7. Diga Yes para agregar dependencia

paso 3

  1. Agregue las configuraciones requeridas al plugin.xml como se muestra en la captura de pantalla y luego en el ejemplo de código plugin.xml.

etapa 4

        
  1. Ahora crea template.xml en la ubicación especificada en plugin.xml ( template/template.xml ) con estos contenidos:
   
  1. Agregue el archivo fuente listado en la plantilla con cualquier contenido que desee en template/src/basename.c

Ahora debería tener una estructura de directorios que se vea así:

 $ find . -type f ./.classpath ./template/src/basename.c ./template/template.xml ./bin/com/example/cdt/templates/Activator.class ./.project ./src/com/example/cdt/templates/Activator.java ./.settings/org.eclipse.jdt.core.prefs ./META-INF/MANIFEST.MF ./plugin.xml ./build.properties 
  1. Inicie la aplicación Eclipse para probar (menú Run As | Run As | Eclipse Application ). También puede hacer clic derecho en el proyecto y seleccionar Run As | Eclipse Application .

  2. En el nuevo Eclipse en ejecución, inicie un nuevo asistente de proyecto y seleccione su nuevo tipo de proyecto C:

nuevo asistente de proyecto

La ejecución de una comstackción muestra la nueva configuración (se espera el error ya que en realidad no tengo una biblioteca llamada mylibname):

 Building file: ../src/hello2.c Invoking: GCC C Compiler gcc -O0 -g3 -Wall -Wextra -c -fmessage-length=0 -Werror -MMD -MP -MF"src/hello2.d" -MT"src/hello2.o" -o "src/hello2.o" "../src/hello2.c" Finished building: ../src/hello2.c Building target: hello2 Invoking: GCC C Linker gcc -o "hello2" ./src/hello2.o -lmylibname /usr/bin/ld: cannot find -lmylibname collect2: error: ld returned 1 exit status make: *** [hello2] Error 1 

¿La parte difícil?

Es posible que necesite examinar el archivo .cproject de su proyecto base para determinar las cadenas mágicas que se encuentran en los campos de id . Por ejemplo, en mi proyecto .cproject para -Wextra puedo ver esto:

  

Eso se traduce a este comando en template.xml :

            

La ID va de gnu.c.compiler.option.warnings.extrawarn.176373860 a regexp .*compiler\.option\.warnings\.extrawarn.* . El comienzo es .* que esto se aplique a las opciones del comstackdor C y C ++, ya que la Id. De C ++ habría comenzado con gnu.cc.compiler[...] y me libraría del final con .* Porque el número y el sufijo no son conocido por usted en template.xml

Próximos pasos

Cuando haya terminado, consulte Launching Eclipse plug in template para saber cómo exportar el complemento en su Eclipse en ejecución.

Me gusta la respuesta de Jonás, es muy informativa. Últimamente he estado usando Ease y Py4J para volver a crear automáticamente una gran cantidad de proyectos con la configuración de cdt que necesito. Solo quería mencionar otra posible forma de hacer este tipo de automatización.

  1. Cree su proyecto de plantilla, almacénelo en algún espacio de trabajo, no necesariamente tiene que estar en el mismo espacio de trabajo como el que está importando a

  2. Archivo-> Importar-> Gneral-> Proyectos existentes-> Seleccione su directorio de proyecto de plantilla

  3. Seleccione la opción “Copiar proyectos en el espacio de trabajo”

  4. Terminar

  5. Opcionalmente, cambie el nombre del proyecto, de esta manera cuando vuelva a importar el proyecto como un nuevo proyecto, no habrá conflictos de nomenclatura.