【问题标题】:No rule to make target for googletest没有规则为 googletest 制定目标
【发布时间】:2021-05-28 19:30:23
【问题描述】:

多年以后,我的 C++ 上的锈迹被刮掉了。很多新东西,包括 CmakeLists.txt。我正在使用 CLION 和 googletest,这两个我也是新手。

我按照教程https://raymii.org/s/tutorials/Cpp_project_setup_with_cmake_and_unit_tests.html 为一个基本项目设置单元测试。现在我正在尝试使该项目适应我的测试项目。

我更改了库结构。 src 目录仍然包含我的源代码和 tst 我的测试,但我在那里创建了一个 lib 目录和一个用于 googletest 的 git 子模块。

这是我的根 CmakeLists.txt

cmake_minimum_required(VERSION 3.17)
project(processcontroller_test)

set(CMAKE_CXX_STANDARD 17)

include_directories(src)

add_subdirectory(src)
add_subdirectory(tst)
add_subdirectory(lib/googletest)

这里是 src

set(BINARY ${CMAKE_PROJECT_NAME})

file(GLOB_RECURSE SOURCES LIST_DIRECTORIES true *.h *.cpp)

set(SOURCES ${SOURCES})

add_executable(${BINARY}_run ${SOURCES})

add_library(${BINARY}_lib STATIC ${SOURCES})

还有一个用于 tst 的

set(BINARY ${CMAKE_PROJECT_NAME}_tst)

file(GLOB_RECURSE TEST_SOURCES LIST_DIRECTORIES false *.h *.cpp)

set(SOURCES ${TEST_SOURCES})

add_executable(${BINARY} ${TEST_SOURCES})

add_test(NAME ${BINARY} COMMAND ${BINARY})

target_link_libraries(${BINARY} PUBLIC ${CMAKE_PROJECT_NAME}_lib gtest)

现在,当我使用 tst/main.cpp 运行测试时,我得到:

====================[ Build | processcontroller_test_tst | Debug ]==============
/opt/clion/bin/cmake/linux/bin/cmake --build /home/thomas/CLionProjects/processcontroller-test/cmake-build-debug --target processcontroller_test_tst -- -j 12
gmake[3]: *** No rule to make target 'src/CMakeFiles/processcontroller_test_lib.dir/build'.  Stop.
gmake[2]: *** [CMakeFiles/Makefile2:227: src/CMakeFiles/processcontroller_test_lib.dir/all] Error 2
gmake[2]: *** Waiting for unfinished jobs....
[ 40%] Built target gtest
gmake[1]: *** [CMakeFiles/Makefile2:262: tst/CMakeFiles/processcontroller_test_tst.dir/rule] Error 2
gmake: *** [Makefile:210: processcontroller_test_tst] Error 2

我认为问题出在我的 tst/CMakeLists.txt 文件的最后一行

target_link_libraries(${BINARY} PUBLIC ${CMAKE_PROJECT_NAME}_lib gtest)

但我不知道怎么做。尝试从文档中阅读有关此内容的信息,但似乎无法理解。

我将 message(STATUS "Source list:" ${SOURCES}) 添加到 src make 文件并将 message(STATUS "Test source list:" ${SOURCES}) 添加到 tst make 并得到了这些结果。

-- Source list:/home/thomas/CLionProjects/processcontroller-test/src/water-dispenser.h
-- Test source list:/home/thomas/CLionProjects/processcontroller-test/tst/Arduino-mock.h/home/thomas/CLionProjects/processcontroller-test/tst/main.cpp/home/thomas/CLionProjects/processcontroller-test/tst/water-dispenser-test.cpp

【问题讨论】:

  • 不存在的目标 (src/CMakeFiles/processcontroller_test_lib.dir/build) 的路径很奇怪。您的CMakeLists.txt 中似乎使用了此路径(或其相对变体)。我怀疑LIST_DIRECTORIES true 对此负责。尝试在子CMakeLists.txt 中打印(通过message() 命令)SOURCES 变量,并检查它是否只包含预期的文件。
  • @Tsyvarev 用结果更新了问题。感谢您的帮助。

标签: c++ cmake googletest


【解决方案1】:

我不明白这些东西,但我尝试的一切都失败了。最后,我只是转储了项目,开始了一个新项目,使用相同的 make 文件逐步重新创建了所有内容,现在一切正常。 CLion 卡住了一些东西。

您可以看出 Clion 不是 JetBrains 的旗舰产品。他们需要更多地关注它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    相关资源
    最近更新 更多