Я работаю в рамках проекта ката, чтобы узнать, как писать модульные тесты в C++ (link to the repository). Одним из элементов этого проекта является библиотека DictionaryPath. Он помещен в отдельном каталоге с посвященной CMakeFile.txt
:CMake: Как настроить модульное тестирование библиотеки
cmake_minimum_required(VERSION 3.6 FATAL_ERROR)
add_library(DictionaryPath
include/DictionaryPath/Dictionary.h
src/Dictionary.cpp
include/DictionaryPath/DictionaryPath.h
src/DictionaryPath.cpp
src/WordsGraph.cpp
src/WordsGraph.h
src/DijkstraAlgorithmImpl.cpp
src/DijkstraAlgorithmImpl.h
src/Path.cpp
src/Path.h
src/Graph.h
src/ShortestPathAlgorithm.h
src/DijkstraAlgorithm.h)
target_include_directories(DictionaryPath PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE src)
Он работает поиск с другими целями (клиенты библиотеки), но когда я попытался добавить модульные тесты в том же подкаталоге я столкнулся с проблемой, как определить цель для модульного теста. E.q. WordsGraph
класс. Я определил цель:
add_executable(WordsGraphTest test/WordsGraphTest.cpp)
target_link_libraries(WordsGraphTest GTest::main DictionaryPath)
add_test(NAME WordsGraphTest COMMAND WordsGraphTest)
Но если я хотел бы попробовать обратиться к WordsGraph
заголовочный файл у меня есть:
test/WordsGraphTest.cpp:9:10: fatal error: 'WordsGraph.h' file not found
Я понимаю причину - файлы в src/
являются частными, но как в этом случае внутренние библиотеки тестовой библиотеки без реализации для каждой цели, которая ссылается на нее? Должен ли я дублировать сборку необходимых файлов библиотеки в каждом модульном тесте?