c++ 无法使用catch2 CATCH_CONFIG_MAIN编译文件

gab6jxml  于 2023-08-09  发布在  其他
关注(0)|答案(2)|浏览(129)

我已经开始学习如何使用Catch2来测试我的C++代码,并试图设置一个简单的测试。
我的文件夹结构由三个文件组成,都在同一个文件夹中:

catch.cpp //this is the catch_amalgamated.cpp file from GitHub
catch.hpp //this is the catch_amalgamated.hpp file from GitHub
test.cpp  //this is my test file

字符串
我在test.cpp中写的是:

#define CATCH_CONFIG_MAIN
#include "catch.hpp"


当我试图编译test.cpp时,我得到了以下错误,我认为这表明没有找到main()函数(?):

C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/libmingw32.a(lib64_libmingw32_a-crt0_c.o):crt0_c.c:(.text.startup+0x2e): undefined reference to `WinMain'
collect2.exe: error: ld returned 1 exit status


当我添加一个名义上的main()函数时,该文件编译成功,但据我所知,#define CATCH_CONFIG_MAIN应该为您创建main()函数,因此某些东西显然不起作用。
有人能解释一下吗?

0sgqnhkj

0sgqnhkj1#

这个错误的发生是因为google默认的分支是catch2的开发分支,所以我使用的是版本3的文件和版本2的文档(因为它还没有更新)。一旦我下载了v.2文件,一切都开始正常工作。

e0uiprwp

e0uiprwp2#

如果您想继续使用catch2 v3,则必须链接Catch2WithMain而不是Catch2
大概是这样

target_link_libraries(unit_tests PRIVATE
    Catch2::Catch2WithMain
)

字符串
来源https://github.com/catchorg/Catch2/blob/devel/docs/migrate-v2-to-v3.md

相关问题