Поймать рамки тестирования долгое время ссылки каждый раз - PullRequest
2 голосов
/ 12 марта 2019

В настоящее время я пытаюсь использовать среду тестирования Catch.Я использую cmake для создания своего проекта, и в настоящее время я просто объединяю все файлы .h и .c.В целях тестирования я вытащил свой фактический «основной» и заменил его на примерный пример фактора Catch.У меня есть два файла:

// testmain.cpp

#define CATCH_CONFIG_MAIN

#include <catch2/catch.hpp>

и

//test.cpp

#include "catch2/catch.hpp"


int Factorial( int number ) {
    return number <= 1 ? number : Factorial( number - 1 ) * number;  // fail
  // return number <= 1 ? 1      : Factorial( number - 1 ) * number;  // pass
}

TEST_CASE( "Factorial of 0 is 1 (fail)", "[single-file]" ) {
 REQUIRE( Factorial(0) == 1 );
}

TEST_CASE( "Factorials of 1 and higher are computed (pass)", "[single-file]" ) {
 REQUIRE( Factorial(1) == 1 );
 REQUIRE( Factorial(2) == 2 );
 REQUIRE( Factorial(3) == 6 );
 REQUIRE( Factorial(10) == 3628800 );
}

Теперь происходит то, что он тратит 3 секунды на сборку и 1 минуту на связывание.После того, как все ссылки (1+ минут), я получаю результаты теста.Я следовал ниже обоим учебным пособиям, в которых упоминается, что эти два файла разделены.

Я прочитал учебник по Catch: https://github.com/catchorg/Catch2/blob/master/docs/tutorial.md

и

вики-страница "медленной компиляции":https://github.com/catchorg/Catch2/blob/master/docs/slow-compiles.md

Я не совсем уверен, почему связь занимает так много времени.Кто-нибудь сталкивался с подобными проблемами?

обновление:

Дополнительная информация о моей среде:

  • cmake 3.14.0-rc1

  • г ++ 8.1.0

1 Ответ

4 голосов
/ 13 марта 2019

Итак, судя по этой известной проблеме:

github.com / catchorg / Catch2 / Issues / 1205

Mingw действительно плохо работает с оптимизацией времени ссылки.Тем не мение;Я наткнулся на решение, которое работает для меня.Установка типа сборки cmake на

RELWITHDEBINFO

, кажется, ускоряет соединение в 10 раз.

...