Исходники тестирования CMake из другой папки

Я начал играть с 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 Я знаю, что можно скомпилировать мои источники в виде библиотеки и связать ее с тестами, но мне не нравится этот подход, так как он больше подходит для интеграционного тестирования, а не модульного тестирования …

РЕДАКТИРОВАТЬ: Добавлены имена классов в дереве

2

Решение

Вы можете добавить глобальную переменную на уровне вашего корневого 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.

2

Другие решения

В корне CMakeLists.txt вы можете добавить include_directories(src) Затем это также будет использоваться тестами. Еще одна вещь, которую вы можете сделать, в тесте CMakeLists.txt добавить include_directories(${<projectName>_SOURCE_DIR}) где название проекта это имя, указанное с помощью project(myproj) в src / CMakeLists.txt (если вы, конечно, указали проект там. Также проверьте документы около проект)

0