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