【问题标题】:CMake + Qt + GTest files linkingCMake + Qt + GTest 文件链接
【发布时间】:2018-10-02 03:18:04
【问题描述】:

我有一个简单的 CMake + Qt + GTest 项目:

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

根 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)

我想在使用 GTest 的 calculator_test.cpp 中访问 calculator.h

#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));
}

我已尝试链接,但未找到测试并且路径是相关的:

测试/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_test.cpp 测试中的 calculator.hCMakeLists.txt 链接?

【问题讨论】:

  • 您混淆了术语:“链接”是指将目标文件(编译器输出)相互绑定以生成生成的二进制可执行文件。我只能假设在您的情况下,编译器在编译“calculator_test.cpp”时找不到“calculator.h”,这可以通过提供包含路径来修复。问题在于项目文件中设置的编译器环境。

标签: c++ qt cmake qt5 googletest


【解决方案1】:

我的带有 CMake 项目文件的 Qt 项目无法解析到 “someHeader.h”。我能做些什么来解决它?

您可以指定包含路径:

include_directories("${PROJECT_SOURCE_DIR}/relativePathToHeader")

以及可能需要的路径:

include_directories("${PROJECT_SOURCE_DIR}/src/utils") 或者也许 include_directories("${PROJECT_SOURCE_DIR}/utils") 取决于源目录的实际位置。

当然,您需要重新运行 CMake。

【讨论】:

  • 太棒了! include_directories("${PROJECT_SOURCE_DIR}/src") 然后使用 PROJECT_SOURCE_DIR 变量设置源文件是一种好习惯吗?即set(SOURCE_FILES calculator_test.cpp ${PROJECT_SOURCE_DIR}/src/utils/calculator.cpp)。或者calculator.cpp 现在可以通过不同的方式到达?
  • 经常这样做,但不是规则。可能取决于项目。很高兴这对你有用。
猜你喜欢
  • 2015-03-15
  • 2017-11-27
  • 2016-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多