Come si aggiunge un passaggio di generazione personalizzato a un progetto basato su automake in KDevelop?

StackOverflow https://stackoverflow.com/questions/107160

  •  01-07-2019
  •  | 
  •  

Domanda

Di recente ho iniziato a lavorare su un progetto di codifica personale usando C ++ e KDevelop. Anche se ho iniziato semplicemente facendo hacking, immagino che a lungo andare sarebbe meglio se avessi creato una suite di test di unità adeguata prima di andare oltre. Ho creato un eseguibile test-runner separato come sottoprogetto e i test che ho aggiunto sembrano funzionare correttamente. Finora, successo.

Tuttavia, mi piacerebbe davvero che i test delle mie unità funzionassero ogni volta che costruisco, non solo quando li eseguo esplicitamente. Ciò sarà particolarmente vero quando ho diviso il casino che ho creato in librerie di convenienza, ognuna delle quali avrà probabilmente il proprio eseguibile di prova. Piuttosto che eseguirli tutti a mano, vorrei farli funzionare come l'ultimo passo del mio processo di compilazione. Ho esaminato tutte le opzioni nel menu progetto e nel gestore automake, ma non riesco a capire come configurarlo.

Immagino che questo potrebbe probabilmente essere fatto modificando il makefile a mano. Sfortunatamente, il mio makefile-fu è un po 'debole, e temo anche che KDevelop possa sovrascrivere qualsiasi modifica che faccio a mano la prossima volta che cambio qualcosa attraverso l'IDE. Pertanto, se c'è un'opzione su come farlo attraverso KDevelop stesso, preferirei di gran lunga andare in quel modo.

Qualcuno sa come potrei ottenere KDevelop per eseguire i miei eseguibili di test come parte del processo di compilazione? Grazie!

(Non sono legato al 100% a KDevelop. Se KDevelop non può farlo, oppure se esiste un IDE che lo rende molto più semplice, potrei essere convinto a cambiare.)

È stato utile?

Soluzione

Anche se potresti manipolare l'obiettivo `make` predefinito per eseguire i tuoi test, generalmente non è raccomandato, perché ogni invocazione di

make

eseguirà tutti i test. Devi utilizzare il segno di spunta " seleziona " target invece, che è un quasi standard accettato tra i pacchetti software. In questo modo, i test vengono avviati solo quando si esegue

make check

Puoi quindi facilmente configurare KDevelop per eseguire " make check " anziché semplicemente " make " ;.

Dato che stai usando automake (tramite KDevelop), non è necessario scrivere " controlla " prendi di mira te stesso. Invece, basta modificare il tuo `Makefile.am` e impostare alcune variabili:

TESTS = ...

Dai un'occhiata a documentazione automake, " Supporto per test suite " per ulteriori informazioni.

Altri suggerimenti

L'ho fatto funzionare in questo modo:

$ cat src/base64.c
//code to be tested
int encode64(...) { ... }

#ifdef UNITTEST
#include <assert.h>
int main(int argc, char* argv[])
{
  assert( encode64(...) == 0 );
  return 0;
}
#endif //UNITTEST
/* end file.c */

$ cat src/Makefile.am
...
check_PROGRAMS = base64-test
base64_test_SOURCES = base64.c
base64_test_CPPFLAGS = -I../include -DUNITTEST
TESTS = base64-test

Un make check comporterebbe src / base64-test ed eseguirlo:

$ make check
...
PASS: base64-test
==================
All 1 tests passed
==================
...

Ora sto cercando di incapsulare tutto come una macro m4 da utilizzare in questo modo:

MAKE_UNITTEST(base64.c)

che dovrebbe produrre qualcosa di simile alla soluzione sopra.

Spero che questo aiuti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top