多年后清除C++上的铁锈。很多新东西,包括CmakeLists.txt。我正在使用CLION和谷歌测试,这两个我都是新手。
我遵循了教程https://raymii.org/s/tutorials/Cpp_project_setup_with_cmake_and_unit_tests.html为基本项目设置单元测试。现在,我正在努力使该项目适应我的测试项目。
我已经改变了图书馆的结构。src目录仍然包含我的源代码和tst我的测试,但我在那里为googletest创建了一个lib目录和一个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
我不明白这些,但我尝试的一切都失败了。最后,我放弃了这个项目,开始了一个新的项目,用相同的make文件一步一步地重新创建了所有东西,现在一切都正常了。CLion有什么东西卡住了。
你可以看出Clion并不是JetBrains的旗舰产品。他们需要更加专注于此。