Comment ajouter une étape de construction personnalisée à un projet basé sur automake dans KDevelop?

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

  •  01-07-2019
  •  | 
  •  

Question

J'ai récemment commencé à travailler sur un projet de codage personnel utilisant C ++ et KDevelop. Bien que j’ai débuté par un simple piratage informatique, j’imagine qu’il serait préférable à long terme de configurer une suite de tests unitaires appropriée avant d’aller trop loin. J'ai créé un exécutable test-runner distinct en tant que sous-projet et les tests que j'ai ajoutés semblent fonctionner correctement. Jusqu'ici, le succès.

Cependant, j'aimerais vraiment que mes tests unitaires soient exécutés à chaque fois que je construis, et pas seulement lorsque je les exécute explicitement. Ce sera particulièrement vrai lorsque je partagerai le bazar que j'ai créé en bibliothèques de commodité, chacune d'entre elles disposant probablement de son propre exécutable de test. Plutôt que de les exécuter tous à la main, j'aimerais qu'ils soient exécutés comme dernière étape de mon processus de création. J'ai parcouru toutes les options du menu du projet et du gestionnaire d'automake, mais je ne vois pas comment le configurer.

J'imagine que cela pourrait probablement être fait en éditant le makefile à la main. Malheureusement, mon fichier makefile-fu est un peu faible et j'ai également peur que KDevelop écrase tous les changements que je fais à la main la prochaine fois que je changerai quelque chose dans l'EDI. Par conséquent, s’il existe une possibilité de le faire par le biais de KDevelop lui-même, je préférerais de loin suivre cette voie.

Est-ce que quelqu'un sait comment je pourrais faire en sorte que KDevelop exécute mes exécutables de test dans le cadre du processus de construction? Merci!

(Je ne suis pas lié à 100% à KDevelop. Si KDevelop ne peut pas le faire, ou s’il existe un environnement de développement intégré qui le facilite beaucoup, je pourrais être convaincu de passer.)

Était-ce utile?

La solution

Bien que vous puissiez manipuler la cible `make` par défaut pour exécuter vos tests, généralement pas recommandé, car chaque invocation de

make

exécuterait tous les tests. Vous devez utiliser l'option "vérifier". cible à la place, qui est un quasi standard accepté parmi les progiciels. En faisant cela, les tests ne commencent que lorsque vous exécutez

make check

Vous pouvez alors facilement configurer KDevelop pour exécuter "faire un chèque" au lieu de simplement "faire".

Puisque vous utilisez automake (via KDevelop), vous n'avez pas besoin d'écrire le "chèque" ciblez-vous. Au lieu de cela, éditez simplement votre `Makefile.am` et définissez des variables:

TESTS = ...

S'il vous plaît jeter un oeil à la documentation automake, "Prise en charge des suites de test" pour plus d'informations.

Autres conseils

Je l'ai obtenu de cette façon:

$ 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

Une vérification construirait src / base64-test et l'exécuterait:

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

Maintenant, j'essaie de tout résumer sous la forme d'une macro m4 à ??utiliser comme ceci:

MAKE_UNITTEST(base64.c)

qui devrait produire quelque chose comme la solution ci-dessus.

J'espère que cela vous aidera.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top