Vinculação dependente do CMake e do pedido de bibliotecas compartilhadas

Eu tenho alguns pequenos componentes que estou construindo como bibliotecas compartilhadas para o meu aplicativo principal. Vamos usar um exemplo deliba elibb. Cada um é construído dentro de seu próprio subdiretório da seguinte maneira:

add_library(liba SHARED a.cpp)

Então, na pasta do projeto raiz, preciso vincular meu aplicativo principal a ambos.

include_directories(a)
include_directories(b)
add_executable(dummy dummy.cpp)
target_link_libraries(dummy a b)

CMake corre bem com isso, e meu aplicativo compila, mas não consegue linkar. O problema é que b faz referência a. Se eu fornecer a ordem das bibliotecas enquanto estiver ligando

target_link_libraries(dummy b a)

O programa compila e liga bem

Quando esse tipo de sistema começa a envolver uma interdependência mais complexa das bibliotecas, ele começa a ser impossível mesmo se as dependências forem acíclicas. Como faço para gerenciar a etapa de vinculação aqui? Existe um truque para encomendar bibliotecas para vincular no CMake?