Google Test:错误 LNK2019:使用 Visual Studio 2017 与 CMake 进行未解析的外

Google Test: error LNK2019: unresolved external symbol with Visual Studio 2017 with CMake

本文关键字:CMake 2017 LNK2019 错误 Test 使用 Visual Google Studio      更新时间:2023-10-16

我目前正在尝试链接Google Test为我的Visual Studio项目创建一个测试套件,但无法使其正确链接。
CMakeList.txt

cmake_minimum_required (VERSION 3.11)
include_directories(include)
include_directories(${GTEST_INCLUDE_DIRS})
include_directories(${SERVER_INCLUDE_DIR})
include_directories(${OPENSSL_INCLUDE_DIR})
include_directories(${MESSAGE_HELPER_INCLUDE_DIR})
include_directories(${PROTOBUF_INCLUDE_DIR})
include_directories(${PROTOBUF_MESSAGE_INCLUDE_DIR})
file(GLOB MessageHelperLibraryTestCPPFiles "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
file(GLOB MessageHelperLibraryTestHeaderFiles "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h")
add_executable (MessageHelperLibraryTests
${MessageHelperLibraryTestCPPFiles} ${MessageHelperLibraryTestHeaderFiles})

target_link_libraries(MessageHelperLibraryTests MessageHelperLibrary)
message(WARNING ${GTEST_BOTH_LIBRARIES})
#set(GTEST_MSVC_SEARCH MT)
target_link_libraries(MessageHelperLibraryTests ${OPENSSL_LIBRARIES})
target_link_libraries(MessageHelperLibraryTests ${PROTOBUF_LIBRARIES})
target_link_libraries(MessageHelperLibraryTests ${GTEST_BOTH_LIBRARIES})
add_dependencies(MessageHelperLibraryTests MessageHelperLibrary)
add_dependencies(MessageHelperLibraryTests ProtoMessages)
#add_test(AllTestsInMessageHelperLibraryTests MessageHelperLibraryTests)

主.cpp

#include <gtest/gtest.h>
int main(int argc, char *argv[])
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

有构建错误。

[ERROR] LNK2019 unresolved external symbol "void __cdecl testing::InitGoogleTest(int *,char * *)" (?InitGoogleTest@testing@@YAXPEAHPEAPEAD@Z) referenced in function main

${GTEST_BOTH_LIBRARIES}的输出是D:/Programming_Apps/googletest/build/googlemock/gtest/Release/gtest.libD:/Programming_Apps/googletest/build/googlemock/gtest/Release/gtest_main.lib这是这些库的正确位置,但似乎仍然无法正确查找和链接库。另一个项目不包含 main,因为它也是一个库,所以我不确定为什么会发生此错误。

我无法通过对库路径进行硬编码来使其工作,但是按照他们的自述文件中的文档并在 CMake 编译时创建所需的目录对我有用。

gtest_main&gtest添加到您的target_link_libraries。它可能会起作用。

target_link_libraries(MessageHelperLibraryTests, LINK_PUBLIC gtest_main gtest)

我还建议您使用 CMake Macro PROJECT_NAME 来替换这里的 MessageHelperLibraryTests。你可以试试这个。

target_link_libraries(${PROJECT_NAME}, LINK_PUBLIC gtest_main gtest)