PRIVATE dla biblioteki INTERFACE w cmake'u?

0

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ć?

0

dobra nawet chyba sprawdzać nie muszę
https://stackoverflow.com/questions/49473973/how-to-include-boost-headers-in-own-header-only-library


Short answer: You can't.

A "header-only library" is just that, one or more headers, only. It's not something that is linked or really stand-alone.

If your header-only library have dependencies, then the users of your library also have those dependencies and need to include them in their own build.

Ale w tym temacie niżej ktoś coś kombinował w innym poście, i w samej dyskusji do posty który podrzuciłem jest pewne wyjaśnienie jak z takimi rzeczami sie obchodzić.

0

W tym linku który podał @revcorey pojawia się ciekawa prezentacja na temat cmake
C++Now 2017: Daniel Pfeifer “Effective CMake"
Zamiast netflixa na wieczór ;)
np. nigdy nie widziałem Bracket Comment a jest coś takiego :D

0

Jaki jest sens prywatnego nagłówka w bibliotece składającej się tylko z plików nagłówkowych?
Jaki jest sens łącznia prywatnie biblioteki do czegoś co samo się nie kompiluje?

1 użytkowników online, w tym zalogowanych: 0, gości: 1