Cześć,
mam następujący problem.
Muszę wydzielić nagłówek, który jest klasą abstrakcyjną do osobnej biblioteki.
Ten nagłówek korzysta z boost'a (to będzie później ważne w kontekście cmake'a).
Początkowo utworzyłem takiego cmake'a dla tej biblioteki:
cmake_minimum_required(VERSION 3.15 FATAL_ERROR)
add_library(MyInterface INTERFACE)
target_include_directories(MyInterface INTERFACE ${CMAKE_CURRENT_LIST_DIR}/export)
target_link_libraries(MyInterface
PRIVATE Boost::filesystem)
Plik nagłówkowy z klasą abstrakcyjną jest w katalogu export - to tak na wszelki wypadek.
Po takim CMake'u przypomniałem sobie, że biblioteka INTERFACE musi również mieć INTERFACE w target_link_libraries
natomiast kiedy faktycznie zmienię ten specyfikator z PRIVATE na INTERFACE, dostaję błąd w stylu:
CMake Error at SomeOtherTarget/CMakeLists.txt:3 (add_library):
Target "SomeTarget" links to target "Boost::filesystem" but the target was
not found. Perhaps a find_package() call is missing for an IMPORTED
target, or an ALIAS target is missing?
Tych targetów do których jest linkowana - ma być linkowana moja biblioteka jest dużo.
Jak rozwiązać taki problem?
Z jednej strony libka musi być INTERFACE, bo nie ma plików źródłowych cpp, a z drugiej strony zawiera libkę z boosta.
Jak żyć?