1

我正在尝试使用下面链接的 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 generator 生成。

编辑:我添加了前几行错误消息。

失败: cmd.exe /c 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-imlib,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):首先定义在这里

4

3 回答 3

3

您的 CMakeLists.txt 错误,它包含两次 main。如果您像这样更改 add_executable-statement 它对我有用:

add_executable(${PROJECT_NAME} main.cpp test.cpp )

希望有帮助。

于 2014-08-19T09:08:15.927 回答
3

您必须包含正确的 catch.hpp。在存储库中有两个同名的不同包含:一个在 include 中,一个称为 single_include。请确保您使用的是 single_include。

于 2014-08-19T08:42:19.813 回答
0

当您从诸如 catch 之类的头文件库中看到诸如链接错误之类的内容时,这意味着您已错误地设置了包含路径。

single_include不使用include

于 2018-06-26T02:40:21.330 回答