Как добавить пользовательский шаг сборки в проект на основе automake в KDevelop? - PullRequest
2 голосов
/ 20 сентября 2008

Я недавно начал работу над проектом персонального кодирования с использованием C ++ и KDevelop. Хотя я начал с того, что просто взломал, я думаю, что в долгосрочной перспективе будет лучше, если я настрою подходящий набор модульных тестов, прежде чем идти слишком далеко. Я создал отдельный исполняемый файл test-runner в качестве подпроекта, и добавленные к нему тесты работают нормально. Пока что успехов.

Однако мне бы очень хотелось, чтобы мои модульные тесты запускались при каждом построении, а не только при их явном запуске. Это будет особенно верно, когда я разделю беспорядок, который я сделал, на вспомогательные библиотеки, каждая из которых, вероятно, будет иметь свой собственный исполняемый файл теста. Вместо того, чтобы запускать их все вручную, я бы хотел, чтобы они запускались как последний шаг в моем процессе сборки. Я просмотрел все параметры в меню проекта и в диспетчере automake, но не могу понять, как это настроить.

Я думаю, что это можно сделать, отредактировав make-файл вручную. К сожалению, мой makefile-fu немного слаб, и я также боюсь, что KDevelop может перезаписать любые изменения, которые я сделаю вручную, в следующий раз, когда я изменю что-то через IDE. Поэтому, если есть возможность сделать это через сам KDevelop, я бы предпочел пойти по этому пути.

Кто-нибудь знает, как я мог заставить KDevelop запускать мои тестовые исполняемые файлы как часть процесса сборки? Спасибо!

(Я не на 100% привязан к KDevelop. Если KDevelop не может этого сделать, или если есть IDE, которая делает это намного проще, я мог бы быть уверен, что переключусь.)

Ответы [ 2 ]

3 голосов
/ 20 сентября 2008

Хотя вы могли бы манипулировать целью по умолчанию `make` для запуска ваших тестов, как правило, это не рекомендуется, потому что каждый вызов

make

будет запускать все тесты. Вместо этого вы должны использовать цель "check", который является принятым квази-стандартом среди пакетов программного обеспечения. Делая это, тесты запускаются только при запуске

make check

Затем вы можете легко настроить KDevelop запустить «сделать проверку» вместо просто «сделать».

Поскольку вы используете automake (через KDevelop), вам не нужно писать «чек» цели самостоятельно. Вместо этого просто отредактируйте ваш `Makefile.am` и установите некоторые переменные:

TESTS = ...

Пожалуйста, посмотрите на automake документация, «Поддержка тестовых пакетов» для дальнейшей информации.

0 голосов
/ 22 декабря 2011

У меня получилось так:

$ 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

A make check создаст src / base64-test и запустит его:

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

Теперь я пытаюсь инкапсулировать все это как макрос m4 для использования следующим образом:

MAKE_UNITTEST(base64.c)

, который должен дать что-то вроде решения выше.

Надеюсь, это поможет.

...