gpt4 book ai didi

c++ - 使用 CMake 和 Visual Studio 的 Catch2

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:38:37 34 4
gpt4 key购买 nike

我正在尝试设置 Catch2我构建的库的测试框架。我正在使用 CMake 和 Visual Studio 2017。

我的项目结构是:

executable-project/
|-- library
|--include/
| |--SUT.h
|--src/
| |--SUT.cpp
|--tests/
| |--catch.hpp
| |--SUTTest.cpp
|CMakeLists.txt
|include/
|src/
| |--main.cpp
|CMakeLists.txt

SUT.hSUT.cppSUTTest.cpp 只是测试基于 example 定义的阶乘函数.

我的库中的CMakeLists.txt文件是

cmake_minimum_required (VERSION 3.8)

set_property(GLOBAL PROPERTY USE_FOLDERS ON)

file(GLOB HEADER_FILES "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h")
file(GLOB SOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
file(GLOB TEST_FILES "${CMAKE_CURRENT_SOURCE_DIR}/tests/*.cpp")

add_library(MY_LIBRARY ${HEADER_FILES} ${SOURCE_FILES} ${TEST_FILES})

target_include_directories(MY_LIBRARY PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")

source_group("Test Files" FILES ${TEST_FILES})

SUTTest.cpp 文件是:

#define CATCH_CONFIG_MAIN

#include "catch.hpp"
#include "SUT.h"

TEST_CASE("Factorials are computed", "[factorial]")
{
SUT sut;

REQUIRE(sut.Factorial(0) == 0);
REQUIRE(sut.Factorial(1) == 1);
REQUIRE(sut.Factorial(2) == 2);
REQUIRE(sut.Factorial(3) == 6);
REQUIRE(sut.Factorial(10) == 3628800);
}

“可执行项目”只是使用库(它是实际的应用程序)。该项目中的 CMakeLists.txt 将库动态链接到它。

当我在 Visual Studio 中构建此解决方案时,构建工作正常。

但是,尽管断言 Factorial(0) == 0,测试并没有失败。此外,Visual Studio 未发现测试文件夹中的测试。我想要实现的目标是:

  1. 当我在 Visual Studio 中单击构建时,测试将作为构建的一部分运行。

  2. (可选)让 Visual Studio 能够发现测试。

编辑:

cmake_minimum_required (VERSION 3.8)

project("My Project")

file(GLOB HEADER_FILES "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h")
file(GLOB SOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")

add_subdirectory(library)
add_executable(MY_APP main.cpp ${HEADER_FILES} ${SOURCE_FILES})

target_include_directories(MY_APP PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
target_link_libraries(MY_APP MY_LIBRARY)

最佳答案

终于设法让 Catch2 与 Visual Studio 一起工作。

首先,我从他们的 GitHub 下载了 Catch2 版本,并使用(这实际上记录在 here 中)将其安装在我的计算机上。

cmake -Bbuild -S. -DBUILD_TESTING=OFF
cmake --build build/ --target install (Need admin rights)

这会将 Catch2 安装在 C:\Program Files (x86)\Catch2 中。然后我将此安装目录中的所有内容复制到我项目的 deps/Catch2 文件夹中。然后只需将以下内容添加到 CMakeLists.txt 中:

find_package(Catch2 REQUIRED PATHS "${CMAKE_CURRENT_SOURCE_DIR}/deps/Catch2")
target_link_libraries(MY_LIBRARY Catch2::Catch2)

include(CTest)
include(Catch)
catch_discover_tests(MY_LIBRARY)

这会将 RUN_TESTS 项目添加到 Visual Studio。当我构建这个项目时,我的单元测试就会运行。希望这对任何尝试与 CMake 集成的人有所帮助。

关于c++ - 使用 CMake 和 Visual Studio 的 Catch2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56405754/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com