将google-test添加到CMake项目中的子文件夹

Dil*_*war 3 cmake googletest

我刚刚将google-test源代码添加到libs/gtest-1.6.4项目目录中.有一个libs/gtest-1.6.4/CMakeLists.txt文件.在最顶层CMakeLists.txt,我补充说add_subdirectory('libs/gtest-1.6.4').该项目的结构是

|- CMakeLists.txt 
|- src 
   |- CMakeLists.txt 
   |- *.h and *.cc 
|- libs
   |- gtest-1.6.4
      |- CMakeLists.txt
      |- gtest source code etc.
|- other subdirectories 
Run Code Online (Sandbox Code Playgroud)

现在我添加#include "gtest/gtest.h"一个头文件.编译失败

gtest/gtest.h: No such file or directory
compilation terminated.
Run Code Online (Sandbox Code Playgroud)

这是我的src/CMakeLists.txt文件的片段.

set( Boost_USE_STATIC_LIBS ON )
find_package( Boost COMPONENTS graph regex system filesystem thread REQUIRED)

.. Normal cmake stuff ...
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS} )

# This line is added for google-test
INCLUDE_DIRECTORIES(${GTEST_INCLUDE_DIRS} ${COMMON_INCLUDES})

add_executable(Partitioner
  print_function.cc
  methods.cc
  partitioner.cc
  main.cc
  )

TARGET_LINK_LIBRARIES(Partitioner ${Boost_LIBRARIES})
TARGET_LINK_LIBRARIES(Partitioner ${GTEST_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Fra*_*ser 5

看看GTest的CMakeLists.txt,看起来它们的包含路径是${gtest_SOURCE_DIR}/include.他们还将库定义为一个调用的CMake目标gtest(它包含在cxx_library(gtest ...)当前第70行的宏中).

所以看起来你需要这样做:

...
# This line is added for google-test
INCLUDE_DIRECTORIES(${GTEST_INCLUDE_DIRS} ${COMMON_INCLUDES})
INCLUDE_DIRECTORIES(${gtest_SOURCE_DIR}/include ${COMMON_INCLUDES})
...
TARGET_LINK_LIBRARIES(Partitioner ${Boost_LIBRARIES})
TARGET_LINK_LIBRARIES(Partitioner ${GTEST_LIBRARIES})
TARGET_LINK_LIBRARIES(Partitioner ${Boost_LIBRARIES} gtest)
Run Code Online (Sandbox Code Playgroud)

您还必须确保在您的根CMakeLists.txt之前调用add_subdirectory(libs/gtest-1.6.4) 过, add_subdirectory(src)以便在"src/CMakeLists.txt"中使用GTest变量时正确设置它们.