捕获单元测试库链接错误

Catch unit test library linking error

本文关键字:链接 错误 单元测试      更新时间:2023-10-16

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

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

FAILED: cmd.exe/c cd .exe,,C: MinGW bin g++ . exe CMakeFiles/catchTest.dir/main.cpp。obj CMakeFiles/catchTest.dir/main.cpp。obj CMakeFiles/catchTest.dir/测试/testTest.cpp。-Wl,——out-implib,libcatchTest.dll。a -Wl,——major-image-version,0,——minor-image-version,0 -lkernel -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是错误的,它包含main两次。如果你像这样修改add_executable语句,它会为我工作:

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

希望对你有帮助。

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

当您看到诸如catch之类的头文件库链接错误时,这意味着您设置的包含路径不正确。

使用single_include而不是include