Как добавить собственный этап сборки в проект на основе automake в KDevelop?

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

  •  01-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

make

провел бы все тесты.Вместо этого вы должны использовать цель «чек», которая является принятым квази-стандартом среди программных пакетов.Сделав это, тесты начинаются только тогда, когда вы запускаете

make check

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

Поскольку вы используете Automake (с помощью KDEVENT), вам не нужно писать «Проверка» сами.Вместо этого просто отредактируйте файл Makefile.am и установите несколько переменных:

TESTS = ...

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

Другие советы

У меня это работает следующим образом:

$ 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

А сделать чек соберет src/base64-test и запустит его:

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

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

MAKE_UNITTEST(base64.c)

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top