Мне нравится работать с gcovr на моем компьютере с Linux, чтобы понять, что тестируется, а что нет. Я упал в яму, где я не вижу решения.
У меня есть C-код, как показано ниже (сохранить как main.c
). Код сделан очень простым - и в действительности основное внимание уделяется только конструкции #if и способам работы с анализом покрытия для различных установок компиляции.
/* Save as main.c */
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
$ gcovr -r . --html --html-details -o index.html
$ firefox index.main.c.html
Это почти супер - но я хочу объединить результаты испытаний для -DPRINTSTYLE=0
(см. ahove) и -DPRINTSTYLE=1
- тогда я логически должен получить 100% охват впроизведенный index.main.c.html
Я полностью понимаю, что в середине необходима перекомпиляция.
Как получить 100% покрытие gcovr с кодом ifdef?