CMake header 唯一依赖

CMake header only dependency

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

项目结构:

-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)

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 并且没有链接器错误,它只是 return 一些错误代码。

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

CMake Header from library not found when implementing in catch test case

但是没有答案,反正作者好像也没有同样的问题

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

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

感谢任何帮助:)

好吧,我删除了 catch 并只是玩弄了 mingw,显然我只是通过使用 std::string 得到了同样的错误。有人说这与缺少 DLL 文件有关。我 运行 对可执行文件的依赖遍历器,确实缺少一堆 DLL。我现在不知道该做什么或从哪里得到这些,所以我放弃了 mingw 并尝试了 cygwin 方法。

但是在 cygwin 中使用 cmake 我没有找到任何适合我的开发环境的生成器 (windows)。

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