У меня есть интерфейс в C ++, который является родителем класса.Я хочу создать проект с помощью cmake с двумя различными списками CMakel, один для интерфейса, а другой для класса в подкаталоге.Затем мне нужно создать статическую библиотеку из класса.Это означает создание файла .a и установку целей с необходимыми заголовочными файлами, которые требуются .a.У меня проблемы, потому что я могу установить .h только из класса.Заголовки интерфейса, включенные в заголовки классов, не установлены и не найдены.Как правильно включить интерфейс в класс, правильно установить и экспортировать цели?
Это структура:
|-------> interface
| |----> CMakeLists.txt
| |----> include
| |----> interface.hpp
| |----> class
| |----> CMakeLists.txt
| |----> include
| |----> class.hpp
| |----> src
| |----> class.cpp
Код здесь.
Интерфейс
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/class ${CMAKE_CURRENT_BINARY_DIR}/class)
add_library(${PROJECT_NAME} INTERFACE)
target_include_directories(${PROJECT_NAME} INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>)
install(TARGETS ${PROJECT_NAME} EXPORT ${PRODUCT_TARGET})
Класс
add_library(${PROJECT_NAME} src/class.cpp include/class.hpp)
set_target_properties(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER "include/class.hpp")
target_include_directories(${PROJECT_NAME}
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE $<TARGET_PROPERTY:interface,INTERFACE_INCLUDE_DIRECTORIES>)
install(TARGETS ${PROJECT_NAME} EXPORT ${PRODUCT_TARGET}
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
PUBLIC_HEADER DESTINATION include/${PROJECT_NAME})
target_link_libraries(${PROJECT_NAME} INTERFACE interface)
РЕДАКТ. 1 *** Генерация .a в порядке, но когда я используюэто в другом проекте, и я включаю class.h он не находит заголовки интерфейсов.