Adding google-test to a subfolder in a CMake project

cmake, googletest

Solution

Looking at GTest's CMakeLists.txt, it looks like their include path is `${gtest_SOURCE_DIR}/include`. They also define the library as a CMake target called `gtest` (this is wrapped in a macro `cxx_library(gtest ...)` currently on line 70).

So it looks like you need to do:

...
# 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)

You'd also have to ensure that in your root CMakeLists.txt, you've called `add_subdirectory(libs/gtest-1.6.4)` before `add_subdirectory(src)` so that the GTest variables are correctly set when they're being used in "src/CMakeLists.txt".

Problem

I have just added google-test source code to `libs/gtest-1.6.4` directory in my project. There is a `libs/gtest-1.6.4/CMakeLists.txt` file. In the top-most `CMakeLists.txt`, I have added `add_subdirectory('libs/gtest-1.6.4')`. The structure of the project is ``` |- CMakeLists.txt |- src |- CMakeLists.txt |- *.h and *.cc |- libs |- gtest-1.6.4 |- CMakeLists.txt |- gtest source code etc. |- other subdirectories ``` Now I add `#include "gtest/gtest.h"` in one of the header file. Compilation fails with ``` gtest/gtest.h: No such file or directory compilation terminated. ``` Here is the snippet of my `src/CMakeLists.txt` file. ``` 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}) ``` What am I missing?

Original source

Related problems