У меня немного запутанный вопрос. У меня есть сторонняя зависимость, которая поставляется в статической (libthird.a
) и общей форме изображения (libthird.so
).
У меня есть библиотека util
, которая зависит от libthird
.
И у меня есть приложения, зависящие от util
, которые хотят связать libthird
статически, и мне нужно создать несколько общих библиотек, которые зависят от util
и должны связать libthird
динамически.
Мой текущий (рабочий) подход выглядит примерно так:
add_library(third INTERFACE)
target_link_libraries(third INTERFACE /path/to/libthird.a)
add_library(third_shared INTERFACE)
target_link_libraries(third_shared INTERFACE /path/to/libthird.so)
add_library(util ${UTIL_SOURCES})
add_library(util_shared ${UTIL_SOURCES}) # same sources again!!
target_link_libraries(util PUBLIC third)
target_link_libraries(util_shared PUBLIC third_shared)
add_executable(some_app ...)
target_link_libraries(some_app PRIVATE util)
add_library(some_shared_object ...)
target_link_libraries(some_shared_object PUBLIC util_shared)
Это работает. Но я собираю util
(и, на самом деле, еще полдюжины библиотек или около того) дважды... просто чтобы получить разные зависимости компоновщика. Есть ли более разумный способ сделать это в cmake?
Если я просто target_link_libraries()
на верхнем уровне some_app
и some_shared_object
, я получу флаги компоновщика, выпущенные в неправильном порядке, поскольку util
действительно зависит от third
.