Header only библиотека на CMake

у меня есть h-o библиотека utils, которую я пытаюсь подключить в exe-шник. структура директорий:

+ my_proj
| + source
| | + ext
| | | + utils
| | | | + include
| | | | | + utils
| | | | | | patterns.hxx
| | | | | | other utils headers...
| | | | CMakeLists.txt
| | CMakeLists.txt
| | main.cxx
| | other sources...
| CMakeLists.txt

в my_proj/CMakeLists.txt и my_proj/source/CMakeLists.txt я собираю exe из исходников (в корневом файле есть команда

...
add_subdirectory("./source/")
...

а в дочернем:

...
add_executable(exe_name sources...)
...
add_subdirectory("./ext/utils/")
target_link_libraries(exe_name utils)
...

вот содержание my_proj/source/ext/utils/CMakeLists.txt:

cmake_minimum_required(VERSION 3.14 FATAL_ERROR)

project("utils"
    VERSION 0.0.1
    LANGUAGES CXX
)

set(UTILS_LIB_NAME "utils")

add_library(${UTILS_LIB_NAME} INTERFACE)

include(GNUInstallDirs)

target_include_directories(
    ${UTILS_LIB_NAME}
    INTERFACE 
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/utils>
        $<INSTALL_INTERFACE:include/utils>
)

target_compile_features(
    ${UTILS_LIB_NAME} 
    INTERFACE 
        cxx_std_17
)

install(
    TARGETS ${UTILS_LIB_NAME} 
    EXPORT utils_Targets
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

install(
    DIRECTORY ${PROJECT_SOURCE_DIR}/include/utils 
    DESTINATION include
)

install(
    EXPORT utils_Targets
    FILE utilsTargets.cmake 
    DESTINATION  ${CMAKE_INSTALL_LIBDIR}/cmake/utils
    NAMESPACE utils::
)

include(CMakePackageConfigHelpers)

write_basic_package_version_file(
    "utilsConfigVersion.cmake"
    VERSION ${PROJECT_VERSION}
    COMPATIBILITY AnyNewerVersion
)

configure_package_config_file(
    "${PROJECT_SOURCE_DIR}/cmake/utilsConfig.cmake.in"
    "${PROJECT_BINARY_DIR}/utilsConfig.cmake"
    INSTALL_DESTINATION
        ${CMAKE_INSTALL_LIBDIR}/cmake/utils
)

install(
    FILES 
        ${PROJECT_BINARY_DIR}/utilsConfig.cmake
        ${CMAKE_CURRENT_BINARY_DIR}/utilsConfigVersion.cmake 
    DESTINATION 
        ${CMAKE_INSTALL_LIBDIR}/cmake/utils
)

я ожидал, что смогу написать что-то такое:

// main.cxx
# include <utils/patterns.hxx>
...

но компилятор выдает ошибку

"не удается открыть файл включения utils/patterns.hxx"

что я делаю не так?


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