C++ 使用googletest设置gmock

C++ 使用googletest设置gmock,c++,cmake,googletest,gmock,C++,Cmake,Googletest,Gmock,有人能帮我用GoogleMock编译google测试框架吗?目前,我有以下cmake文件: cmake_minimum_required(VERSION 3.2) if (CMAKE_VERSION VERSION_LESS 2.8.11) include_directories(BEFORE SYSTEM "${gtest_SOURCE_DIR}/include" "${gmock_SOURCE_DIR}/include") else() target_include_dir

有人能帮我用GoogleMock编译google测试框架吗?目前,我有以下cmake文件:

cmake_minimum_required(VERSION 3.2)

if (CMAKE_VERSION VERSION_LESS 2.8.11)
  include_directories(BEFORE SYSTEM
    "${gtest_SOURCE_DIR}/include" "${gmock_SOURCE_DIR}/include")
else()
  target_include_directories(gmock_main SYSTEM BEFORE INTERFACE
    "${gtest_SOURCE_DIR}/include" "${gmock_SOURCE_DIR}/include")
endif()


set(CMAKE_CXX_STANDARD 11)

# Locate GTest
find_package(GTest REQUIRED)

include_directories(${GTEST_INCLUDE_DIRS})

# Link runTests with what we want to test and the GTest and pthread library
add_executable(runTests tests.cpp)
target_link_libraries(runTests gmock_main)
target_link_libraries(runTests ${GTEST_LIBRARIES} pthread)
目前我遇到了这个错误:无法为目标“gmock_main”指定包含目录,该目标不是由该项目生成的

我知道这是因为上面的第7行,但是如果我删除整个if-else语句,我会得到以下错误:致命错误:gmock/gmock.h:没有这样的文件或目录 编译终止


如果有人能帮助我,我将不胜感激。

您正在使用
find_package
查找GTest库。。。但是正在使用
gmock
库。另外,拥有
cmake_minimum_required(版本3.2)
意味着只有cmake 3.2+可以执行
CMakeLists.txt,因此检查版本是否小于2.8.12是没有用的。我考虑过包含if-else语句,因为这是谷歌模拟教程在git存储库中显示的方式,所以我把它抄了过来。用find_包定位GTest库是什么意思,但我使用的是mock?Dp您知道我应该做什么吗?如果您遵循,它会谈到,当您使用
add_subdirectory()
而不是
find_package()
包含GTest和GMock基础结构时。在这种情况下,“if else语句”应该位于相应的
add_subdirectory
call之后,因此
gmock_main
target将在此时定义。我不明白在哪里应该使用[add_subdirectory]而不是[find_package]。如果我更改了[find_package]行,我应该将其更改为什么?如果您的源代码中的目录
gtest
下有googletest源代码,请使用
add_子目录(gtest EXCLUDE_FROM_ALL)
。否则,使用谷歌测试手册中描述的代码。您正在使用
find_package
查找GTest库。。。但是正在使用
gmock
库。另外,拥有
cmake_minimum_required(版本3.2)
意味着只有cmake 3.2+可以执行
CMakeLists.txt,因此检查版本是否小于2.8.12是没有用的。我考虑过包含if-else语句,因为这是谷歌模拟教程在git存储库中显示的方式,所以我把它抄了过来。用find_包定位GTest库是什么意思,但我使用的是mock?Dp您知道我应该做什么吗?如果您遵循,它会谈到,当您使用
add_subdirectory()
而不是
find_package()
包含GTest和GMock基础结构时。在这种情况下,“if else语句”应该位于相应的
add_subdirectory
call之后,因此
gmock_main
target将在此时定义。我不明白在哪里应该使用[add_subdirectory]而不是[find_package]。如果我更改了[find_package]行,我应该将其更改为什么?如果您的源代码中的目录
gtest
下有googletest源代码,请使用
add_子目录(gtest EXCLUDE_FROM_ALL)
。否则,采用谷歌测试手册中描述的代码。