Связывание файлов CMake + Qt + GTest

Ugnius Malūkas спросил: 28 марта 2018 в 03:05 в: c++

У меня есть простой проект CMake + Qt + GTest:

.
├── CMakeLists.txt
├── src
│   ├── CMakeLists.txt
│   ├── main.cpp
│   └── utils
│       ├── calculator.cpp
│       └── calculator.h
└── tests
    ├── calculator_test.cpp
    └── CMakeLists.txt

Root CMakeFiles.txt

cmake_minimum_required(VERSION 3.5)project(random_project)# Place binaries and libraries according to GNU standards.
include(GNUInstallDirs)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})# Add source folder.
add_subdirectory(src)# Add GTest.
include(cmake/googletest.cmake)
fetch_googletest(
        ${PROJECT_SOURCE_DIR}/cmake
        ${PROJECT_BINARY_DIR}/googletest
)enable_testing()# Add tests folder.
add_subdirectory(tests)

И я хочу достичь calculator.h в calculator_test.cpp, который использует GTest:

#include <gtest/gtest.h>
#include "utils/calculator.h" // <- Want to reach this in that path format.TEST(example, add)
{
    EXPECT_EQ(8, Calculator::sum(3, 5));
}

Я пробовал для ссылки, но затем тест не найден, и путь выдается:

tests / CMakeFiles.txt

# Find the Qt libraries.
find_package(Qt5Widgets REQUIRED)# Qt5 libraries.
set(QT5_LIBRARIES
        Qt5::Widgets)# Source files.
set(SOURCE_FILES
        calculator_test.cpp
        ../src/utils/calculator.cpp
        ../src/utils/calculator.h
        ../src/main.cpp) # If I link like this, test is not found.# Tell CMake to create the executable.
add_executable(unit_tests ${SOURCE_FILES})# Use the Widgets module from Qt5.
target_link_libraries(unit_tests ${QT5_LIBRARIES} gtest_main)# Add tests.
add_test(
        NAME unit_tests
        COMMAND ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}/unit_tests
)

Как связать calculator.h в тесте calculator_test.cpp с помощью CMakeLists.txt?

1 ответ

Есть решение
Alexander V ответил: 28 марта 2018 в 05:34

Мой проект Qt с файлом проекта CMake не может разрешить путь к "someHeader.h". Что я могу сделать, чтобы это исправить?

Вы можете указать путь включения:

include_directories("${PROJECT_SOURCE_DIR}/relativePathToHeader")

и, вероятно, необходимый путь:

include_directories("${PROJECT_SOURCE_DIR}/src/utils") или, возможно, include_directories("${PROJECT_SOURCE_DIR}/utils") в зависимости от того, где на самом деле находится исходный каталог.

Вам необходимо перезапустить CMake, конечно.

Ugnius Malūkas ответил: 28 марта 2018 в 05:48
Brilliant! Это хорошая практика для include_directories("${PROJECT_SOURCE_DIR}/src"), а затем устанавливать исходные файлы также с помощью переменной PROJECT_SOURCE_DIR? Т.е. set(SOURCE_FILES calculator_test.cpp ${PROJECT_SOURCE_DIR}/src/utils/calculator.cpp) Или calculator.cpp теперь может быть достигнут по-другому?
Alexander V ответил: 28 марта 2018 в 06:28
Часто это делается так, но это не правило. Может зависеть от проекта. Рад, что работал на вас.