Я начал играть с CMake, чтобы создать проект с Qt и протестировать его с помощью Google Test. На данный момент я успешно нашел способ скомпилировать и связать все необходимые библиотеки. Однако я не смог найти способ связать источники для тестирования файлов со следующей структурой проекта:
root
|
+-- CMakeLists.txt
+-- src
| |
| +-- CMakeLists.txt
| +-- MyClass.h
| +-- MyClass.cpp
|
+-- test
| |
| +-- CMakeLists.txt
| +-- MyClassTest.cpp
|
+-- lib
|
+-- gtest-1.6.0
|
+-- CMakeLists.txt
Корневой CMakeLists.txt содержит add_subdirectory для папок gtest, src и test. Я успешно скомпилировал и запустил приложение «Hello world» и простой тест EXPECT_TRUE (true) для проверки правильности компиляции каждой части. К сожалению, я не смог найти способ включить мой исходный файл в тесты. Возможно ли это со следующей структурой проекта?
PS Я знаю, что можно скомпилировать мои источники в виде библиотеки и связать ее с тестами, но мне не нравится этот подход, так как он больше подходит для интеграционного тестирования, а не модульного тестирования …
РЕДАКТИРОВАТЬ: Добавлены имена классов в дереве
Вы можете добавить глобальную переменную на уровне вашего корневого CMakeLists.txt:
set(ALL_SRCS CACHE INTERNAL "mydescription" FORCE)
В первом add_subdirectory (src) вы можете сделать:
set(ALL_SRCS ${ALL_SRCS} blabla.cpp CACHE INTERNAL "description")
И в add_subdirectory (test) вы продолжаете:
set(ALL_SRCS ${ALL_SRCS} bla_test.cpp CACHE INTERNAL "description")
Затем вы можете сделать add_executable или library или что-то еще со всеми вашими исходными файлами.
РЕДАКТИРОВАТЬ: добавить трюк для глобальных переменных в CMake.
В корне CMakeLists.txt вы можете добавить include_directories(src)
Затем это также будет использоваться тестами. Еще одна вещь, которую вы можете сделать, в тесте CMakeLists.txt добавить include_directories(${<projectName>_SOURCE_DIR})
где название проекта это имя, указанное с помощью project(myproj)
в src / CMakeLists.txt (если вы, конечно, указали проект там. Также проверьте документы около проект)