Creazione di un nuovo progetto C ++ in Eclipse CDT con le stesse impostazioni di un altro progetto

C’è un modo semplice per creare un nuovo progetto C ++ che cloni le impostazioni di un progetto esistente? Quando sviluppo C ++, mi piace scrivere molti piccoli test ed esempi, ma se il mio codice dipende da librerie esterne, come spesso accade, devo impostare ogni volta gli include, le librerie, le impostazioni del compilatore, ecc. C’è una sorta di meccanismo di modello?

So dell’esportazione / importazione delle impostazioni del progetto C / C ++. Tuttavia, questo sembra solo raccogliere i percorsi di inclusione e #definiti per la compilazione C ++. Il fatto che non esporti la lista completa delle impostazioni (opzioni del compilatore, impostazioni di avviso, opzioni del linker, librerie, percorsi della libreria, …) limita davvero la sua utilità.

Inoltre, devi farlo separatamente per ogni configurazione di corsa, anche se questo è un piccolo inconveniente.

Quello che in genere .cproject è la copia di un progetto di test e la modifica manuale dei file .cproject e .cproject , quindi il nuking e la sostituzione dei file. Ma questo sembra un hack sobject a errori.

Ci sono altri approcci? Devo passare a un sistema di compilazione separato e generare esternamente i progetti Eclipse per avere quella che sembra una funzionalità di base?


AGGIORNARE

Ho provato a creare un progetto plug-in, ma le istruzioni lasciano più di un po ‘a desiderare se non l’hai fatto prima. Voglio assolutamente capire come farlo.

Ho copiato e modificato il modello di esempio in alcuni modi molto semplici, solo per iniziare, ma le istruzioni “Come registrare un modello di progetto con CDT” mi hanno perso dall’inizio: “1. Creare un progetto di plug-in vuoto da Eclipse banco di lavoro senza le cartelle di origine. ” Presumo che ciò richieda l’installazione del PDE, cosa che ho fatto, ma poi mi sono perso. Ho provato “File / Nuovo / Progetto plug-in”, deselezionato “Crea un progetto Java” (ho pensato che fosse ciò che intendeva per “Vuoto”). Questo crea un progetto che ha ancora molte cose in esso. Ho quindi creato le sottodirectory come descritto nel passaggio 2, ma non riesco a capire come ottenerle affinché vengano visualizzate in Eclipse e, di conseguenza, non riesco a individuare il file XML del modello nel passaggio 11. Inoltre, nei passaggi 9 / 10, non viene visualizzato un modello “letteralmente denominato” (modello) “”, ma ne crea uno con il nome completo del mio progetto di modello.

CDT ha un meccanismo completo di Templating per la creazione di nuovi progetti.

In pratica, estendi il punto di estensione org.eclipse.cdt.core.templates e punta a un file template.xml che ha un sacco di comandi che puoi eseguire. Non è necessario scrivere alcun codice Java per questo, ma è necessario creare un progetto Plug-in.

Il tipo di cose che puoi fare:

  • Crea cartelle
  • Aggiungi file a un progetto
  • Imposta le impostazioni di Gestione gestita (questa è la più rilevante perché puoi impostare le opzioni del compilatore e aggiungere librerie, ecc.)
  • Aggiungi pagine aggiuntive alla procedura guidata Nuovo progetto per richiedere all’utente ulteriori informazioni

La documentazione di Eclipse ha una sezione speciale che spiega come farlo qui: http://help.eclipse.org/mars/topic/org.eclipse.cdt.doc.isv/guide/projectTemplateEngine/index.html

Il progetto Hello World fornito con CDT ha il suo modello qui: https://github.com/eclipse/cdt/blob/master/build/org.eclipse.cdt.managedbuilder.gnu.ui/templates/projecttemplates/HelloWorldCAnsiProject/template .xml

Una piccola nota, se inizialmente si crea il plug-in da installare come plug-in non compresso, è ansible modificarlo sul posto, aggiungere nuovi modelli o modificare quello già fatto.

Andando oltre, puoi condividere questo progetto di plug-in del modello con il tuo team e tutti traggono vantaggio dall’avere questa funzione.

Passo dopo passo

Il processo passo passo per farlo (testato su Eclipse Mars.1 con strumenti di sviluppo CDT e plug-in installati oltre a un editor XML per la modifica di template.xml)

  1. Creare un progetto plug-in ( File | New | Other... | Plug-in project )

passo 1

  1. Inserisci il nome di un progetto e premi Next / Finish fino al termine

passo 2

Ora dovresti avere dei file sul tuo disco che assomigliano a questo nel progetto che hai creato:

 $ 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. Apri il plug-in.xml e fai quanto segue
    1. Seleziona la scheda Extensions
    2. Premere Aggiungi
    3. Digitare il punto di estensione org.eclipse.cdt.core.templates
    4. Deseleziona la casella Show only extension points [...]
    5. Seleziona i file org.eclipse.cdt.core.templates dall’elenco
    6. Premere Finish
    7. Yes all’aggiunta della dipendenza

passaggio 3

  1. Aggiungi le impostazioni richieste al file plugin.xml come mostrato nella schermata e fornito nel seguente esempio del codice plugin.xml.

step4

        
  1. Ora crea il template.xml nella posizione specificata nel file plugin.xml ( template/template.xml ) con questi contenuti:
   
  1. Aggiungi il file sorgente elencato nel modello con qualsiasi contenuto desideri nel template/src/basename.c

Ora dovresti avere una struttura di directory che assomigli a questa:

 $ 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. Avviare l’applicazione Eclipse da testare (menu Run As | Run As | Eclipse Application ). Puoi anche fare clic con il tasto destro del mouse sul progetto e selezionare Run As | Eclipse Application .

  2. Nel nuovo Eclipse in esecuzione, avviare una nuova procedura guidata di progetto e selezionare il nuovo tipo di progetto C:

nuovo wizard di progetto

L’esecuzione di una build mostra le nuove impostazioni (l’errore è previsto in quanto in realtà non ho una libreria denominata 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 difficile?

Potrebbe essere necessario esaminare il file .cproject dal progetto di base per determinare le stringhe magiche che vanno nei campi id . Ad esempio, nel mio .cproject per -Wextra posso vedere questo:

  

Questo si traduce in questo comando nel template.xml :

            

L’ID va da gnu.c.compiler.option.warnings.extrawarn.176373860 a regexp .*compiler\.option\.warnings\.extrawarn.* . L’inizio è .* modo che questo si applichi alle opzioni del compilatore C e C ++ poiché l’id C ++ sarebbe iniziato con gnu.cc.compiler[...] e io mi gnu.cc.compiler[...] della fine con .* Perché il numero e il suffisso non è noto a voi nel template.xml

Prossimi passi

Al termine, consultare Avvio di Eclipse plug-in nel modello per informazioni su come esportare il plug-in in Eclipse in esecuzione.

Mi piace la risposta di Giona, è molto istruttiva. Ultimamente uso Ease e Py4J per ricreare automaticamente un gran numero di progetti con le impostazioni cdt di cui ho bisogno. Volevo solo menzionare un altro modo ansible di fare questo tipo di automazione.

  1. Crea il tuo progetto modello, memorizzalo in qualche spazio di lavoro, non deve necessariamente trovarsi nello stesso spazio di lavoro di quello che stai importando

  2. File-> Importa-> Gneral-> Progetti esistenti-> Seleziona la directory del tuo modello

  3. Seleziona l’opzione “Copia progetti nello spazio di lavoro”

  4. finire

  5. Opzionalmente rinominare il progetto, in questo modo quando si importa nuovamente il progetto come nuovo progetto, non ci saranno conflitti di denominazione