Ich migriere einige Projekte, um CMake Build-System zu verwenden. Jetzt füge ich Projekt mit einigen Einheitentests unter Verwendung der Catch Bibliothek hinzu. Es ist nur eine Header-Bibliothek. Das alte Visual Studio Projekt baut gut, aber das neue CMake Projekt gibt ungelösten externen Symbol Linker-Fehler. Ich habe CATCH_CONFIG_MAIN in einer meiner Quelldateien definiert. Es werden alle cpp Dateien aus anderen Projekten hinzugefügt, die für die Tests benötigt werden, und alle Bibliotheken, von denen andere getestete Projekte abhängen, sind verknüpft. Trotzdem habe ich nicht aufgelöstes externes Symbol Fehler nur mit von CMake Projekt generiert:Nicht aufgelöstes externes Symbol mit Catch-Bibliothek
ChipCountTests.obj : error LNK2019: unresolved external symbol "public: __thiscall Catch::SourceLineInfo::SourceLineInfo(char const *,unsigned int)" ([email protected]@@[email protected]@Z) referenced in function "void __cdecl `anonymous namespace'::`dynamic initializer for 'autoRegistrar1''(void)" ([email protected][email protected]@YAXXZ)
1>FlyingChipRewardCalculatorUT.obj : error LNK2001: unresolved external symbol "public: __thiscall Catch::SourceLineInfo::SourceLineInfo(char const *,unsigned int)" ([email protected]@@[email protected]@Z)
Offensichtlich fehlt mir etwas Konfiguration von vcxproj zu CMakeLists.txt
hinzufügen, aber ich bin derzeit kann es nicht herausgefunden.
Sie vermissen offensichtlich einige Catch-Bibliotheken. Wenn Sie sie im Linker-Abschnitt Ihres VS-Projekts nicht finden können; Versuchen Sie dann, in den Kopfzeilen von Catch nach '#pragma comment (lib," name-of-catch-library ") zu suchen, was dazu führt, dass die benannte Bibliothek automatisch vom Linker übernommen wird. –
@Richard Critten Wie gesagt, die Fangbibliothek ist nur Header und es gibt keine ** libs ** dafür. – bobeff
Haben Sie "offizielle" Anweisungen für die CMake-Integration verwendet? https://github.com/philesquared/Catch/blob/master/docs/build-systems.md (siehe Abschnitt CMake) –