Вам понадобится отдельная цель, которая предоставляет только заголовки.
И библиотека stati c, и библиотека dynamici c будут зависеть от этой цели только для заголовка, но не друг от друга.
Обычно это достигается определением цели библиотеки интерфейса для заголовков:
target_include_directories(MyHeaders INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
add_library(MyStaticLib STATIC a.cpp)
target_link_libraries(MyStaticLib PUBLIC MyHeaders)
add_library(MyDynamicLib SHARED b.cpp)
target_link_libraries(MySDynamicLib PUBLIC MyHeaders)
Обратите внимание, как для этого вам понадобится полный контроль над определением все цели библиотеки. Если библиотека stati c предоставляется сторонней сборкой, которая не находится под вашим контролем, это не будет работать. В этом случае вам следует связаться с сопровождающим сторонней библиотеки, чтобы выяснить, как они могут поддержать ваш вариант использования.