2011-07-27 20 views
13

Quiero un include-guard generado automáticamente al crear una nueva clase C++ con Eclipse/CDT, pero no encuentro ninguna forma de cambiar el atributo ${include_guard_symbol}.Personalización de include-guard para Eclipse CDT

Mi deseo es un guardia incluir con un prefijo de espacio de nombres como el siguiente:

#ifndef NAMSPACE1_NAMESPACE2_HEADER_HPP 

Pero si uso #ifndef ${namespace_name}_${include_guard_symbol} para ello, se producirá:

namepace1::namespace2::_HEADER_HPP 

¿Cómo puedo hacer esto?

+0

posible duplicado de [Eclipse-CDT: El uso de espacio de nombres en automática generada incluye-guardias] (http: // stackoverflow.com/questions/3520943/eclipse-cdt-use-namespace-in-automatic-generated-include-guard) – Mark

Respuesta

14

Tuve una búsqueda en la fuente de CDT, y encontré una configuración de preferencia no documentada que puede utilizar para cambiar lo que se genera en ${include_guard_symbol}. Tampoco hay una GUI, pero si agrega la configuración codetemplates.includeGuardGenerationScheme a <projectpath>/.settings/org.eclipse.cdt.ui.prefs, puede elegir entre el nombre del archivo (predeterminado), la ruta del archivo o UUID.

Dado el archivo <projectpath>/src/include/Class.h, los siguientes valores de dar a estos resultados:

  • 0 da un nombre de archivo en mayúsculas, es decir CLASS_H_
  • 1 da un UUID, por ejemplo. HC9ABE718_D04E_411C_B5A2_F9FE1D9F9409
  • 2 proporciona una ruta de archivo en mayúsculas, es decir, SRC_INCLUDE_CLASS_H_

Para evitar cualquier duda, aquí es el contenido de nuestra .settings/org.eclipse.cdt.ui.prefs:

codetemplates.includeGuardGenerationScheme=2 
eclipse.preferences.version=1 
formatter_settings_version=1 

Obviamente no es exactamente lo que está después, pero usamos 2 para darnos una aproximación de nuestros espacios de nombres ya que, en términos generales, nuestros espacios de nombres siguen nuestra estructura de carpetas.

El código en cuestión es en estos archivos en el origen CDT:

  • core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/PreferenceConstants.java de las constantes para cada opción
  • core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/corext/codemanipulation/StubUtility.java para el método generateIncludeGuardSymbol() que hace el trabajo.

Sería realmente agradable ver una opción adicional agregada para usar el espacio de nombres y una GUI también.

+0

para mi CDT 8.2.0 la ruta del archivo de prefs es: /. metadata/.plugins/org.eclipse .core.runtime/.settings/org.eclipse.cdt.ui.prefs – stoycho

+2

En CDT 8.5 (y quizás más antiguo) Preferencias> C/C++> Estilo de código> Nombre de nombre, en el cuadro de Categorías de nombre, elija Código> Incluir guardia, esto mostrarle las tres opciones mencionadas en esta respuesta. Sin embargo, aún no hay opción de espacio de nombres :( – Eelke

0

Estoy usando Eclipse Oxygen (CDT 9.3) y como Eelke describió en su comentario, ha habido una configuración de IU para esto desde hace un tiempo.

Sin embargo, solo le permite elegir entre los esquemas preestablecidos, sin espacio de nombres ni opciones de personalización más completas disponibles todavía.

Busque 'guardar' en el cuadro de diálogo de preferencias, o vaya a C/C++> Estilo de código> Estilo de nombre y seleccione Código> Incluir guardia y luego elija entre los esquemas de guarda disponibles.

enter image description here