Применение настройки CMake для детских проектов - PullRequest
1 голос
/ 18 марта 2019

У меня есть проектная директория, подобная этой:

3rdparty 
    |--glfw
test
   |--3rdparty
      |--googletest
   |--CMakeLists.txt (Test project CMakeLists)
CMakeLists.txt (Main project CMakeLists)

В основном проекте при настройке внешних зависимостей:

add_subdirectory(3rdparty/glfw)
target_link_libraries(Main glfw)

Каков наилучший способ применить все зависимости также для тестового проекта? Я должен повторить весь код зависимости также в дочернем CMakeLists.txt? Заранее спасибо

1 Ответ

1 голос
/ 18 марта 2019

Обычно, когда у вас есть тестовый проект, вы должны связать свои тестовые исполняемые файлы с остальной частью кода.Делая это с помощью CMake, вы должны автоматически получать транзитивные зависимости.Тем не менее, для этого вам нужен API на основе цели CMake.

add_executable(Main ... your cpp files ...)
add_library(YourLib ... your cpp files ...)

add_subdirectory(3rdparty/glfw) # or find_package(glfw)

# link YourLibs to glfw
target_link_libraries(YourLibs PUBLIC glfw)

# link Main to YourLibs and its public dependencies
target_link_libraries(Main PUBLIC YourLibs)

Затем в своем тестовом файле cmake создайте ссылку на ту же цель, что и у вашего exe, чтобы получить доступ к своей собственной функции, включите каталоги и библиотеки:

add_executable(Test cppfile.cpp)
add_test(Test)
target_link_libraries(Test PRIVATE YourLibs gtest)
...