首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

GTest CMake main的多个定义

在使用GTest和CMake构建C++项目时,可能会遇到“multiple definition”错误。这通常是因为CMakeLists.txt文件中的配置不正确,导致多个源文件包含了相同的符号。为了解决这个问题,请遵循以下步骤:

  1. 确保在CMakeLists.txt文件中只包含一次GTest的头文件和库文件。例如:
代码语言:javascript
复制
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})
  1. 在添加可执行文件时,请确保不要多次链接GTest库。例如:
代码语言:javascript
复制
add_executable(my_test test1.cpp test2.cpp)
target_link_libraries(my_test ${GTEST_BOTH_LIBRARIES})
  1. 如果您在多个源文件中使用了相同的命名空间或全局变量,请确保它们只在一个地方定义。如果需要在多个源文件中使用相同的符号,请使用extern关键字声明它们。
  2. 如果您使用了多个CMakeLists.txt文件,请确保它们之间的依赖关系正确配置。例如,如果您有一个名为common的子目录,其中包含一些公共源文件,请在主CMakeLists.txt文件中添加以下内容:
代码语言:javascript
复制
add_subdirectory(common)

然后在common/CMakeLists.txt文件中添加相应的源文件和目标:

代码语言:javascript
复制
add_library(common_lib common1.cpp common2.cpp)

最后,在主CMakeLists.txt文件中将公共库链接到您的测试目标:

代码语言:javascript
复制
target_link_libraries(my_test common_lib ${GTEST_BOTH_LIBRARIES})
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券