CMake und auftragsabhängige Verknüpfung von Shared Libraries

Ich habe ein paar kleine Komponenten, die ich als gemeinsam genutzte Bibliotheken für meine Hauptanwendung aufbaue. Verwenden wir ein Beispiel fürliba undlibb. Jedes Verzeichnis wird wie folgt in einem eigenen Unterverzeichnis erstellt:

add_library(liba SHARED a.cpp)

Dann muss ich im Stammprojektordner meine Hauptanwendung mit beiden verknüpfen.

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

CMake läuft einwandfrei, und meine Anwendung wird kompiliert, kann jedoch keine Verknüpfung herstellen. Das Problem ist, dass b auf a verweist. Wenn ich die Reihenfolge der Bibliotheken beim Verlinken mitgebe als

target_link_libraries(dummy b a)

Das Programm kompiliert und verlinkt prima

Wenn diese Art von System anfängt, komplexere Abhängigkeiten zwischen den Bibliotheken zu beinhalten, wird es unmöglich, selbst wenn die Abhängigkeiten azyklisch sind. Wie verwalte ich den Verknüpfungsschritt hier? Gibt es einen Trick, um Bibliotheken für die Verknüpfung in CMake zu bestellen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage