CMake i zależne od zamówienia połączenie bibliotek współdzielonych
Mam kilka małych komponentów, które buduję jako biblioteki współdzielone dla mojej głównej aplikacji. Użyjmy przykładuliba
ilibb
. Każdy z nich jest zbudowany we własnym podkatalogu w następujący sposób:
add_library(liba SHARED a.cpp)
Następnie w głównym folderze projektu muszę połączyć moją główną aplikację z obydwoma.
include_directories(a)
include_directories(b)
add_executable(dummy dummy.cpp)
target_link_libraries(dummy a b)
CMake działa bez zarzutu, a moja aplikacja się kompiluje, ale nie łączy. Problem polega na tym, że b odnosi się do a. Jeśli podam kolejność bibliotek podczas łączenia jako
target_link_libraries(dummy b a)
Program dobrze się kompiluje i łączy
Kiedy ten rodzaj systemu zaczyna się wiązać z bardziej złożoną zależnością bibliotek, zaczyna być niemożliwy, nawet jeśli zależności są acykliczne. Jak zarządzać tutaj krokiem łączenia? Czy jest jakiś sposób na zamawianie bibliotek do łączenia w CMake?