Я пытаюсь использовать пакетный набор тестов CATCH, указанный ниже.
https://github.com/philsquared/Catch
Однако я не могу сделать это правильно.
Main.cpp и test.cpp заключаются в следующем.
//main.cpp
#define CATCH_CONFIG_MAIN
#include "catch.hpp"
//test.cpp
#include "catch.hpp"
TEST_CASE("TESTTest", "") {
CHECK(1 != 2 );
}
Когда эти два файла находятся в одной папке, я могу получить желаемый результат.
Однако я перенес test.cpp
в подкаталог с именем test
, Он больше не работает, как ожидалось, но генерирует ошибки связывания.
Моя настройка cmake описана ниже.
project(catchTest)
cmake_minimum_required(VERSION 2.8)
file(GLOB_RECURSE INCS "./*.cpp")
add_executable(${PROJECT_NAME} main.cpp ${INCS})
include_directories(.)
file(GLOB_RECURSE INCS "./*.cpp")
был добавлен, чтобы включить все исходные файлы cpp, расположенные в подкаталогах. а также include_directories(.)
был включен, чтобы дать им знать определение catch.hpp
,
Я уверен, что сделал что-то не так, но не знаю, как это исправить.
Пожалуйста, посоветуйте мне решить эту проблему.
Он был запущен в Windows, скомпилирован с использованием mingw gcc-4.9.1 и сгенерирован генератором cmake ninja.
РЕДАКТИРОВАТЬ: я добавил первые несколько строк сообщений об ошибках.
СБОЙ: cmd.exe / cd. && C: \ MinGW \ bin \ g ++. Exe CMakeFiles / catchTest.dir / main.cpp.obj CMakeFiles / catchTest.dir / main.cpp.obj CMakeFiles / catchTest.dir / test / testTest.cpp.obj -o catchTest.exe -Wl, — out-implib, libcatchTest.dll.a -Wl, — major-image-version, 0, — minor-image-version, 0 -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && CD .
CMakeFiles / catchTest.dir / main.cpp.obj: main.cpp :(. Text + 0x0): множественное определение `Catch :: getResultCapture () ‘
CMakeFiles / catchTest.dir / main.cpp.obj: main.cpp :(. Text + 0x0): сначала определено здесь
Ваш CMakeLists.txt неправильный, он включает основной дважды. Если вы измените оператор add_executable, как это, он работает для меня:
add_executable(${PROJECT_NAME} main.cpp test.cpp )
Надеюсь, это поможет.
Ким
Вы должны включить правильный catch.hpp. В репозитории есть два разных включения с одинаковыми именами: одно включает и одно называется single_include. Пожалуйста, убедитесь, что вы используете single_include.
Когда вы видите что-то вроде ошибки связывания из библиотеки заголовочных файлов, такой как catch, это означает, что вы неправильно установили путь включения.
использование single_include
не include
,