Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding google-test to a subfolder in a CMake project

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?

like image 618
Dilawar Avatar asked Mar 23 '23 22:03

Dilawar


1 Answers

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".

like image 110
Fraser Avatar answered Apr 03 '23 22:04

Fraser