Как создать экспортный конфигурационный файл CMake с компонентами библиотеки?

Прошу помощи в написании экспортного конфигурационного файла "ProjectConfig.cmake" для проекта "Project", для использования в другом проекте в виде:

find_package(Project COMPONENTS lib1 lib2 REQUIRED)

На данный момент я создал рабочий файл, который генерируется функцией configure_package_config_file из файла ProjectConfig.cmake.in:

@PACKAGE_INIT@

# get a config name
if(@PROJECT_NAME@_STATIC_LIBRARIES)
    set(config_name Static)
else()
    set(config_name Shared)
endif()

# include an export targets file
set(export_targets "${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@_${config_name}Targets.cmake")
if(NOT EXISTS "${export_targets}")
    set(@PROJECT_NAME@_FOUND FALSE)
    set(@PROJECT_NAME@_NOT_FOUND_MESSAGE "Requested configuration ${export_targets} was not found")
else()
    include("${export_targets}")  
endif()

# find components
foreach(component ${@PROJECT_NAME@_FIND_COMPONENTS})

    if(NOT TARGET ${component})
        if(@PROJECT_NAME@_FIND_REQUIRED_${component})
            set(@PROJECT_NAME@_FOUND FALSE)
            set(@PROJECT_NAME@_NOT_FOUND_MESSAGE "Found @PROJECT_NAME@ but requested component '${component}'\
                                          is missing in the config defined in ${@PROJECT_NAME@_DIR}.")
        endif()
    endif()

endforeach()

Как по мне, это довольно "топорный" способ проверки наличия компонентов. Есть ли способ проще, красивее, современнее?


Ответы (0 шт):