Мне нравится работать с gcovr на моем Linux-компьютере, чтобы понять, что проверено, а что нет. Я упал в яму, где не вижу решения.
У меня есть C-код, как показано чуть ниже (сохранить как main.c
). Код сделан очень просто - и в действительности основное внимание уделяется только конструкции #if и тому, как работать с анализом покрытия для различных настроек компиляции.
/* Save as main.c */
#include <stdio.h>
void fct(int a)
{
// Define PRINTSTYLE to 0 or 1 when compiling
#if PRINTSTYLE==0
if (a<0) {
printf("%i is negative\n", a);
} else {
printf("%i is ... sorta not negative\n", a);
}
#else
if (a<0) {
printf("%i<0\n", a);
} else {
printf("%i>=0\n", a);
}
#endif
}
int main(void)
{
fct(1);
fct(-1);
return 0;
}
Что я могу скомпилировать и провести тест покрытия в Linux, например,
$ rm -f testprogram *.html *.gc??
$ gcc -o testprogram main.c \
-g --coverage -fprofile-arcs -ftest-coverage --coverage \
-DPRINTSTYLE=0
$ ./testprogram
$ gcovr -r . --html --html-details -o index.html
$ firefox index.main.c.html
Это почти супер, но я хочу объединить результаты тестов для -DPRINTSTYLE=0
(см. Выше) и -DPRINTSTYLE=1
- тогда я, по логике, должен получить 100% покрытие в созданном index.main.c.html
Я полностью понимаю, что перекомпиляция нужна посередине.
Как мне получить 100% покрытие с помощью gcovr с кодом ifdef?