Ich habe eine ausführbare Datei (Game Engine), die Symbole exportiert (ich habe set_target_properties(game PROPERTIES ENABLE_EXPORTS ON)
verwendet).Wie erstellt man eine künstliche zirkuläre Abhängigkeit zwischen Zielen
Ich habe eine Reihe von Plug-ins, die auf diese ausführbare Datei verknüpfen:
foreach(plugin ${PLUGINS})
target_link_libraries(${plugin} game)
endforeach()
Sie werden dynamisch mit LoadLibrary
/dlopen
durch die ausführbare Datei geladen.
Wenn ich F5 in Visual Studio drücke und ich das Spiel starte, bekomme ich die geänderten Plugins nicht neu, weil das Spiel nicht von ihnen abhängt - es ist umgekehrt.
Ich wollte folgendes tun:
foreach(plugin ${PLUGINS})
add_dependencies(game ${plugin})
endforeach()
aber es führt eine zirkuläre Abhängigkeit zwischen den einzelnen Plug-in und das Spiel. Wie kann ich mein F5-Problem lösen?
Wie Verwenden Sie die exportierten Funktionen in Ihrem Plug-in-Code? Wenn Sie die Interface-Beschreibungen fest codiert haben oder in einer Header-Datei haben, dann gibt es nur eine indirekte Abhängigkeit von 'plugin' zu' game'. Was passiert also, wenn Sie nur Ihr "Spiel" von der "Plugin" Variante abhängig machen? Sollte aus meiner Sicht gut funktionieren. – Florian
@Florian Nun, ich rufe in die Engine ... fast jedes Stück Funktionalität wird aus der ausführbaren Datei exportiert. Ich benutze die Engine-Header in den Plugins ... Das "' '' Plugin''' hängt ab von '' 'game''''" Abhängigkeit ist hier zu bleiben. Ich frage mich, wie man den F5-Workflow auch funktioniert ... – onqtam
Wenn ich von den Plugins alles, was die Engine exportiert, mit '' 'getProcAddress''' anstelle von' '' __declspec (dllimport) '' 'annotiert weiterleiten Deklarationen, die ich entfernen könnte das "' '' Plugin '' 'hängt von' '' Spiel''' "Abhängigkeit, aber das wäre nicht praktisch zu Code ... – onqtam