2015-10-21 2 views
2

J'essaie de créer un nouveau modèle de projet pour Eclipse CDT afin de répondre à ma question here. @Jonah Graham a fourni une description très détaillée de sa réponse au 1 et cela m'a le plus souvent amené. Cependant, je n'arrive pas à comprendre comment définir une option spécifiée via une liste déroulante; par exemple. Dialect/Language Standard à ISO C++11 (-std=c++01) dans l'onglet Paramètres/Paramètres d'outil/Compilateur GCC/Dialect de GCC. cela ne semble pas le même problème se poserait si je voulais changer l'optimisation par défaut ou les niveaux de débogage, etc.Modèle de projet CDT Eclipse - Définition des options déroulantes

Je pensais que cela pourrait se faire par quelque chose comme

<process 
    type="org.eclipse.cdt.managedbuilder.core.SetMBSStringListOptionValues"> 
    <simple name="projectName" value="$(projectName)" /> 
    <complex-array name="resourcePaths"> 
     <element> 
      <simple name="id" value=".*cpp\.compiler\.option\.dialect\.std." /> 
      <simple-array name="values"> 
       <element value="gnu.cpp.compiler.dialect.c++11" /> 
      </simple-array> 
      <simple name="path" value="" /> 
     </element> 
    </complex-array> 
</process> 

Malheureusement, pour avoir une effect (aucune erreur, mais rien dans le fichier .cproject résultant non plus).

Je peux contourner ce problème en définissant le drapeau "Autre dialecte", qui est juste une chaîne, mais j'aimerais savoir comment le faire via une liste déroulante, car ceux-ci viennent dans d'autres endroits.

Répondre

3

La façon de faire cette option est de la traiter comme une chaîne et les internes avec changer la valeur de chaîne à la valeur enum. Je l'ai testé avec C99 (à savoir pas C++), pour lequel je ceci:

<!-- Set -std=c99 by selecting the enum in the 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\.dialect\.std.*" /> 
      <simple name="value" value="ISO C99 (-std=c99)" /> 
      <simple name="path" value="" /> 
     </element> 
    </complex-array> 
</process> 

Donc, pour votre solution que j'attendre cela fonctionnera. Notez que la valeur est tout ce qui est affiché à l'utilisateur:

<process 
    type="org.eclipse.cdt.managedbuilder.core.SetMBSStringOptionValue"> 
    <simple name="projectName" value="$(projectName)" /> 
    <complex-array name="resourcePaths"> 
     <element> 
      <simple name="id" value=".*cpp\.compiler\.option\.dialect\.std." /> 
      <simple name="value" value="gnu.cpp.compiler.dialect.c++11" /> 
      <simple name="path" value="" /> 
     </element> 
    </complex-array> 
</process> 

Par rapport à votre version, j'ai changé le type de processus et l'ensemble de l'élément name="value" (simple-array-simple plus le nom interne pour afficher le nom).

+1

J'ai mis à jour https://github.com/jonahkichwacoders/example_cdt_template pour intégrer ce paramètre si cela peut vous aider. –

+0

Cela ne fonctionne pas pour moi - je ne comprends rien. J'ai copié ce qui précède et j'ai vérifié que la valeur correspond à ce qui est affiché dans la liste déroulante. Je l'ai également essayé en utilisant une valeur de "gnu.cpp.compiler.dialect.C++ 11", qui est ce qui est enregistré dans le fichier .cproject, mais aucun de ceux-ci ne fonctionne pour moi. – sfjac

+0

Oops - Je le reprends. Ce que j'ai fait ci-dessus n'a pas fonctionné mais quand j'ai changé ce que vous avez recommandé d'utiliser "gnu.cpp.compiler.dialect.C++ 11", cela a fonctionné. – sfjac