CMake фиктивная цель в зависимости от других целей

У меня есть один сторонний проект, предоставляющий много библиотек (скажем, библиотеки только для заголовков). Я хочу написать инкапсуляцию CMake для этого проекта:

файлfoo.cmake

add_library(          foo-aaa INTERFACE IMPORTED GLOBAL)
set_target_properties(foo-aaa PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR}/aaa/inc)

add_library(          foo-bbb INTERFACE IMPORTED GLOBAL)
set_target_properties(foo-bbb PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR}/bbb/inc)

add_library(          foo-ccc INTERFACE IMPORTED GLOBAL)
set_target_properties(foo-ccc PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR}/ccc/inc)

add_library(          foo-ddd INTERFACE IMPORTED GLOBAL)
set_target_properties(foo-ddd PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR}/ddd/inc)

add_library(          foo-eee INTERFACE IMPORTED GLOBAL)
set_target_properties(foo-eee PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR}/eee/inc)

[...] And many more

# For convenience I also want to provide 
# a global/dummy target depending on all above libraries
add_library( foo ????? )

ГлавныйCMakeLists.txt

cmake_minimum_required(VERSION 3.1)
project(bar CXX)
include(path/to/3rdparty/foo/foo.cmake)
add_executable(bar bar.cpp)
target_link_libraries(bar foo)

Вопрос:
Как написать фиктивную цельfooэто зависит от всех остальных?

2 ответа

Решение

Предполагая, что вам не нужна библиотека, которая содержит все библиотеки, вы можете вместо этого:

add_custom_target( foo )
add_dependencies( foo foo-aaa foo-bbb foo-ccc )

При написании вопроса я получил ответ. Мое решение - цель INTERFACE без INCLUDE_DIRECTORIES.

add_library(foo INTERFACE)
target_link_libraries(foo foo-aaa foo-bbb foo-ccc foo-ddd foo-eee [...])

Надеюсь, что этот ответ может кому-то помочь.

Другие вопросы по тегам