0

我在使用 CMake 使用 catch2 运行简单测试时遇到了一些问题。因为 catch 只是头文件,所以我觉得它很容易放入任何项目中,所以我想我会像普通头文件一样包含它。

项目结构:

-build
-external
    -Catch2
        catch2.hpp
 CMakeLists.txt
 tester.cpp

CMakeLists.txt:

cmake_minimum_required(VERSION 3.12)
project(Test VERSION 1.0.0)

include_directories(external)

enable_testing()
add_executable(tester tester.cpp)
add_test(Tester tester)

测试仪.cpp:

#define CATCH_CONFIG_MAIN
#include "Catch2\catch.hpp"

TEST_CASE( "1 is 1" ) {
    REQUIRE( 1 == 1 );
}

输出:

0% tests passed, 1 tests failed out of 1

Total Test time (real) =   0.03 sec

The following tests FAILED:
          1 - Tester (Exit code 0xc0000139
)
Errors while running CTest

显然测试应该通过,但它没有。由于我是 CMake 和 catch2 领域的初学者,我很难确定问题所在。我可以肯定地说的catch.hpp是找到并且没有链接器错误,它只是返回一些错误代码。

我环顾四周,发现了这个:

在 catch 测试用例中实现时找不到库中的 CMake Header

但它没有答案,反正作者似乎也没有同样的问题。

这就是我构建和运行测试的方式(位于构建目录中):

cmake .. -G "MinGW Makefiles" && mingw32-make && ctest

任何帮助都值得赞赏:)

4

1 回答 1

0

好吧,我删除了 catch 并使用了 mingw ,显然我只是使用std::string. 有人说这与缺少 DLL 文件有关。我在可执行文件上运行了依赖walker,确实丢失了一堆DLL。我现在不知道该做什么或从哪里得到这些,所以我放弃了 mingw 并尝试了 cygwin 方法。

但是将 cmake 与 cygwin 一起使用,我没有为我的开发环境(windows)找到任何兼容的生成器。

然后我转而生成一个 Visual Studio 项目(我从一开始就避免这样做,因为我不想在 IDE 中开发)。但我发现我可以使用 msbuild 从生成的 Visual Studio 项目中构建可执行文件,它的工作原理就像一个魅力,带有 catch。

于 2019-01-15T22:33:55.503 回答