CMake заголовок только зависимость - PullRequest
0 голосов
/ 15 января 2019

У меня проблемы с запуском простого теста с catch2 с использованием CMake. Поскольку catch - это только заголовок, у меня сложилось впечатление, что его легко вставить в любой проект, поэтому я подумал, что просто включу его как обычный заголовочный файл.

Структура проекта:

-build
-external
    -Catch2
        catch2.hpp
 CMakeLists.txt
 tester.cpp

CMakeLists.txt:

cmake_minimum_required(VERSION 3.12)
project(Test VERSION 1.0.0)

include_directories(external)

enable_testing()
add_executable(tester tester.cpp)
add_test(Tester tester)

tester.cpp:

#define CATCH_CONFIG_MAIN
#include "Catch2\catch.hpp"

TEST_CASE( "1 is 1" ) {
    REQUIRE( 1 == 1 );
}

Выход:

0% tests passed, 1 tests failed out of 1

Total Test time (real) =   0.03 sec

The following tests FAILED:
          1 - Tester (Exit code 0xc0000139
)
Errors while running CTest

Очевидно, что тест должен пройти, но это не так. Поскольку я новичок как в области CMake, так и catch2, мне трудно определить проблему. Что я могу сказать наверняка, так это то, что catch.hpp найден и нет ошибок компоновщика, он просто возвращает некоторый код ошибки.

Я оглянулся и нашел это:

Заголовок CMake из библиотеки не найден при реализации в контрольном примере

Но у него нет ответов, и у автора, похоже, нет такой же проблемы.

Вот как я собираю и запускаю тесты (стоящие в каталоге сборки):

cmake .. -G "MinGW Makefiles" && mingw32-make && ctest

Любая помощь оценивается:)

1 Ответ

0 голосов
/ 16 января 2019

Хорошо, я удалил catch и просто поиграл с mingw, и, видимо, я получил ту же ошибку, просто используя std::string. Кто-то сказал, что это связано с отсутствующими файлами DLL. Я запустил средство обхода зависимостей от исполняемого файла, и действительно, отсутствовала куча библиотек DLL. Сейчас я не знал, что делать и где их взять, поэтому я бросил mingw и попробовал подход cygwin.

Но, используя cmake с cygwin, я не нашел совместимых генераторов для моей среды разработки (windows).

Затем я переключился на создание визуального студийного проекта (чего я избегал с самого начала, потому что не хотел развиваться в IDE). Но я обнаружил, что могу использовать msbuild для сборки исполняемого файла из сгенерированного проекта Visual Studio, и он работает как чудо, с catch.

...