CMake ошибка: «Не удалось найти файл загрузки GoogleTest» - PullRequest
0 голосов
/ 18 сентября 2018

У меня проблема с добавлением googletests в CMakeLists.txt.

Проблема в "Ошибка: включить не удалось найти файл загрузки: GoogleTest" .

Я установил тесты Google с помощью команд:

  1. sudo apt-get установить libgtest-dev
  2. sudo apt-get установить cmake # установить cmake
  3. cd / usr / src / gtest
  4. sudo cmake CMakeLists.txt
  5. sudo make
  6. sudo cp * .a / usr / lib

Эти команды я взял из здесь .Вот мой 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})

Буду очень признателен, если вы дадите мне совет!

1 Ответ

0 голосов
/ 19 сентября 2018

Если вы уже установили libgtest, просто добавьте в свой CMakeLists.txt следующее:

target_link_libraries($YOUR_TARGTET gtest)

Но! Я думаю, вы сделали это слишком сложным.

Лучше включить исходный код googletest непосредственно в ваш проект в качестве сторонней библиотеки.Я пойду сюда вот так и после.

Поскольку вы включили 'apt-get' в свой пример кода, я предполагаю, что вы работаете с Debian или потомками Debian.Ну, конечно, на самом деле не имеет значения, в какой ОС вы работаете.

Клонируйте исходный код googletest (проверьте предыдущую ссылку) в свой проект, добавив следующее в свой основной CMakeLists.txt:

add_subdirectory(googletest)

добавьте следующее в проекты sub-cmake, где вам потребуется gtest:

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

например,

Допустим, у вас есть проект со следующей структурой:

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

В вашем основном CMakeLists.txt у вас должно быть:

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

В третьем_самом CMakeLists.txt:

add_subdirectory(googletest)
# ...

В тестах CMakeLists.txt:

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

Лучший пример

Вот видео пример для Gtest в CLion от Jetbrains.Поскольку CLion фактически основан на CMake, он также ясно показывает вам, как интегрировать GTest в CMake.

Поддержка Google Test в CLion

...