У меня есть простой тест, где я использую библиотеку catch2.Тест выглядит следующим образом:
#include <catch2/catch.hpp>
TEST_CASE("Pass Tests")
{
REQUIRE(1 == 1);
}
Если мы хотим, чтобы catch использовал наш main.cpp вместо определения его собственного main, тогда мы должны добавить #define CATCH_CONFIG_RUNNER в main.cpp, но я хочу добавить это определениепрепроцессор в моем CMakeList, а не в main.cpp, так что вот мой main.cpp:
#include <catch2/catch.hpp>
int main(int argc, char *argv[])
{
// bootstrap Catch, running all TEST_CASE sequences.
auto result = Catch::Session().run(argc, argv);
return (result < 0xFF ? result : 0xFF);
}
и мой CMakeList выглядит так:
set (CMAKE_CXX_STANDARD 11)
cmake_minimum_required(VERSION 3.10)
project(main)
include_directories(${CMAKE_SOURCE_DIR}/include)
file(GLOB_RECURSE sources main.cpp Test.cpp)
add_executable (main ${sources})
target_compile_definitions(main PRIVATE -DCATCH_CONFIG_RUNNER)
Моя проблема в том, что когда я компилирую, я получаюошибки "множественные определения улова", но когда я добавляю #define CATCH_CONFIG_RUNNER непосредственно в main.cpp, это не дает мне никакой ошибки и работает отлично.Что я могу сделать, чтобы он работал с CMake, а не добавлял его в свой main.cpp?