1

Catch2プロジェクトにサブモジュールとして追加しCatch2/include/catch.hpp、次のコードを使用してヘッダーを含めました。

testmain.cpp:

#define CATCH_CONFIG_MAIN // This tells Catch to provide a main() - only do this in one cpp file
#include "catch.hpp"

TEST_CASE( "Test test", "[test]" ) {
    REQUIRE(true);
}

しかし、リンカーエラーが発生します:

Undefined symbols for architecture x86_64: "Catch::NameAndTags::NameAndTags(Catch::StringRef const&, Catch::StringRef const&)", referenced from: ___cxx_global_var_init.1 in testmain.cpp.o

私は何を間違っていますか?Catch2 はヘッダーに自己完結型であるはずで.cpp、シンボルを提供するためのファイルは必要ないと思いましたか?

4

1 に答える 1

1

Catch2 Github Issues の 1 つへの応答のおかげで、それを理解しました。

ホレンマー:

You are supposed to use the single-include version.

It is possible to use the headers in include/, but then you have to also compile and
link the implementation files in there and you are not provided with any guarantees
vis-a-vis stability and functionality.

のバージョンincludes/は、「実際の」Catch2 ヘッダーが生成される元のファイルです。含めることになっているものは にありCatch2/single_include/catch2/catch.hppます。そのため、ヘッダー検索パスがcatch.hppではなくを検索するように設定されていることを確認してくださいincludes

于 2021-04-23T20:13:30.100 に答える