CMake y orden de enlace dependiente de bibliotecas compartidas.
Tengo algunos componentes pequeños que estoy creando como bibliotecas compartidas para mi aplicación principal. Vamos a usar un ejemplo deliba
ylibb
. Cada uno está construido dentro de su propio subdirectorio de la siguiente manera:
add_library(liba SHARED a.cpp)
Luego, en la carpeta del proyecto raíz, necesito vincular mi aplicación principal a ambas.
include_directories(a)
include_directories(b)
add_executable(dummy dummy.cpp)
target_link_libraries(dummy a b)
CMake funciona bien con esto, y mi aplicación compila pero no puede enlazar. El problema es que b hace referencia a. Si proporciono el orden de las bibliotecas al enlazar como
target_link_libraries(dummy b a)
El programa compila y enlaza muy bien.
Cuando este tipo de sistema comienza involucrando una interdependencia más compleja de las bibliotecas, comienza a ser imposible incluso si las dependencias son acíclicas. ¿Cómo manejo el paso de enlace aquí? ¿Hay algún truco para ordenar bibliotecas para enlazar en CMake?