tutorial tools plugin para oxygen development descargar cross cpp configurar compiler cdt c++ eclipse eclipse-cdt

tools - install c++ eclipse oxygen



Crear un nuevo proyecto de C++ en Eclipse CDT con la misma configuraciĆ³n que otro proyecto (2)

¿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 compilador, 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 compilación de C ++. El hecho de que no exporta toda la lista de configuraciones (opciones de compilació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 maneras 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 configuraciones de Compilación administrada (esta es la más relevante porque puede establecer opciones de compilació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 )

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

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 casilla de verificación Show only extension points [...]
    5. Seleccione el org.eclipse.cdt.core.templates de la lista
    6. Presione Finish
    7. Diga Yes para agregar dependencia

  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.

<?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.4"?> <plugin> <extension point="org.eclipse.cdt.core.templates"> <template filterPattern=".*gcc" id="com.example.cdt.templates.template1" location="template/template.xml" projectType="org.eclipse.cdt.build.core.buildArtefactType.exe"> </template> </extension> </plugin>

  1. Ahora crea template.xml en la ubicación especificada en plugin.xml ( template/template.xml ) con estos contenidos:

<?xml version="1.0" encoding="ISO-8859-1"?> <template type="ProjTempl" version="1.0" supplier="" revision="1.0" author="Jonah Graham" id="EXE" label=" Example" description="An example for https://.com/questions/33092746/creating-a-new-c-project-in-eclipse-cdt-with-the-same-settings-as-another-proj." help="help.html"> <process type="org.eclipse.cdt.managedbuilder.core.NewManagedProject"> <simple name="name" value="$(projectName)" /> <simple name="artifactExtension" value="exe" /> <simple name="isCProject" value="true" /> </process> <process type="org.eclipse.cdt.core.CreateSourceFolder"> <simple name="projectName" value="$(projectName)" /> <simple name="path" value="src" /> </process> <process type="org.eclipse.cdt.core.AddFiles"> <simple name="projectName" value="$(projectName)" /> <complex-array name="files"> <element> <simple name="source" value="src/basename.c" /> <simple name="target" value="src/$(projectName).c" /> <simple name="replaceable" value="true" /> </element> </complex-array> </process> <process type="org.eclipse.cdt.ui.OpenFiles"> <simple name="projectName" value="$(projectName)" /> <complex-array name="files"> <element> <simple name="target" value="src/$(projectName).c" /> </element> </complex-array> </process> <!-- Set -Wall by checking the checkbox in the settings --> <process type="org.eclipse.cdt.managedbuilder.core.SetMBSBooleanOptionValue"> <simple name="projectName" value="$(projectName)" /> <complex-array name="resourcePaths"> <element> <simple name="id" value=".*compiler/.option/.warnings/.extrawarn.*" /> <simple name="value" value="true" /> <simple name="path" value="" /> </element> </complex-array> </process> <!-- Set -Werror by adding textual build settings --> <process type="org.eclipse.cdt.managedbuilder.core.SetMBSStringOptionValue"> <simple name="projectName" value="$(projectName)" /> <complex-array name="resourcePaths"> <element> <simple name="id" value=".*compiler/.option/.misc/.other.*" /> <simple name="value" value="-c -fmessage-length=0 -Werror" /> <simple name="path" value="" /> </element> </complex-array> </process> <!-- Add -lmylibname to libraries to link --> <process type="org.eclipse.cdt.managedbuilder.core.AppendToMBSStringListOptionValues"> <simple name="projectName" value="$(projectName)" /> <complex-array name="resourcePaths"> <element> <simple name="id" value=".*link/.option/.libs.*" /> <simple-array name="values"> <element value="mylibname" /> </simple-array> <simple name="path" value="" /> </element> </complex-array> </process> </template>

  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:

La ejecución de una compilació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:

<option id="gnu.c.compiler.option.warnings.extrawarn.176373860" name="Extra warnings (-Wextra)" superClass="gnu.c.compiler.option.warnings.extrawarn" value="true" valueType="boolean"/>

Eso se traduce a este comando en template.xml :

<!-- Set -Wall by checking the checkbox in the settings --> <process type="org.eclipse.cdt.managedbuilder.core.SetMBSBooleanOptionValue"> <simple name="projectName" value="$(projectName)" /> <complex-array name="resourcePaths"> <element> <simple name="id" value=".*compiler/.option/.warnings/.extrawarn.*" /> <simple name="value" value="true" /> <simple name="path" value="" /> </element> </complex-array> </process>

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 compilador 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.