Catch单元测试库链接错误

时间:2014-08-19 08:29:12

标签: c++ unit-testing catch-unit-test

我正在尝试使用下面链接的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-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):首先在这里定义

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

您的CMakeLists.txt错误,它包含两次主要内容。如果你改变这样的add_executable语句,它对我有用:

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

希望有所帮助。

答案 2 :(得分:0)

当您看到诸如来自头文件库(例如catch)的链接错误之类的东西时,表明您设置了错误的包含路径。

使用single_include而不是include