1
votes

I have a problem with adding googletests to CMakeLists.txt.

The problem is "Error:include could not find load file: GoogleTest".

I have installed google tests using the commands:

  1. sudo apt-get install libgtest-dev
  2. sudo apt-get install cmake # install cmake
  3. cd /usr/src/gtest
  4. sudo cmake CMakeLists.txt
  5. sudo make
  6. sudo cp *.a /usr/lib

These commands I took from here. There is my CMakeLists.txt:

cmake_minimum_required(VERSION 3.6.2)

set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_CXX_STANDARD 17)

project(compiler)

include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})

find_package(FLEX REQUIRED)
FLEX_TARGET(lexer src/lexer.fl ${CMAKE_CURRENT_BINARY_DIR}/lexer.cpp)

find_package(GTest REQUIRED)
include(GoogleTest) <- There is a problem!
add_executable(run_tests src/tests/test.cpp src/main.h ${FLEX_lexer_OUTPUTS})
target_include_directories(run_tests PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(run_tests ${GTEST_LIBRARIES} stdc++fs)
#gtest_add_tests(TARGET run_tests)

add_executable(compiler src/main.h src/main.cpp src/common.h ${FLEX_lexer_OUTPUTS})

I will be really appreciate if you give me an advice!

1
Cannot find a line include(GoogleTest) in the tutorial you refer to. Instead, the tutorial suggests to use another way for link with Google Test libraries.Tsyvarev

1 Answers

1
votes

If you already got libgtest installed, just add following in your CMakeLists.txt:

target_link_libraries($YOUR_TARGTET gtest)

But! I think you made it too complicated.

It's better to include the googletest source code directlly into your project as a third party library. I will go here this way here and after.

As you involved 'apt-get' in your code example, I assume you are on Debian or Debian decendants. Well, of caurse actually it does not matter which OS you are on.

Clone the googletest source code(check previous for link) into your project, add following into your main CMakeLists.txt:

add_subdirectory(googletest)

add following into sub-cmake projects where you are going to need gtest:

include_directories(${PARENT_PATH_OF_GTEST}/googltest/googltest/include)
# ...
target_link_libraries($YOUR_TARGET gtest)

e.g.

Let's say you have a project with following structure:

.
├── assets
│   └── ...
├── bin
│   ├── CMakeLists.txt
│   └── ...
├── CMakeLists.txt       <== Your main CmakeLists.txt
├── src
│   ├── CMakeLists.txt
│   └── ...
├── tests                <== Test cases
│   ├── CMakeLists.txt
│   └── ...
└── third_party
    ├── CMakeLists.txt
    ├── googletest       <=== gtest
    └── ...

In your main CMakeLists.txt, you should have:

add_subdirectory(tests)
add_subdirectory(third_party)
# ...

In the third_party CMakeLists.txt:

add_subdirectory(googletest)
# ...

In the tests CMakeLists.txt:

include_directories(${CMAKE_SOURCE_DIR}/third_party/googltest/googltest/include)
# ...
add_executable(my_test...)
target_link_libraries(my_test gtest)
# ...

A better example

Here is a video example for Gtest in CLion from Jetbrains. As CLion actually bases on CMake, so it also clearlly shows you how to integrate GTest into CMake.

Google Test support in CLion