Das eigene Modul bauen und integrieren
Den Code eines Moduls zu schreiben sagt nichts darüber aus, wie es gebaut wird — und zwei sehr unterschiedliche Ansätze sind gleichermaßen legitim, je nachdem, was man damit vorhat.
Für sich allein arbeiten
Nichts verpflichtet dazu, über das Repository ost/ostmodules zu gehen: ein Modul kann in seinem eigenen Repository leben, mit seiner eigenen CMakeLists.txt, inspiriert von der aus ost/ostmodules, statt sie sklavisch zu kopieren. Zwei Informationen reichen aus, um eine reale OST-Installation wiederzufinden:
find_path(OST_INCLUDE_DIR ost/indimodule.h)
find_library(OST_LIBRARY_BASE NAMES libostbasemodule.so PATHS /usr/lib /usr/lib/x86_64-linux-gnu)
find_library(OST_LIBRARY_INDI NAMES libostindimodule.so PATHS /usr/lib /usr/lib/x86_64-linux-gnu)ost/ostmodules macht genau das in cmake_modules/FindOSTSERVER.cmake — statt es zu erraten, ist es am einfachsten, direkt von dieser Datei auszugehen und sie zu lesen.
Für ein rein auf Basemodule basierendes Modul ist nur OST_LIBRARY_BASE nötig; OST_LIBRARY_INDI wird nur für ein IndiModule benötigt.
Zum gemeinsamen Repository beitragen
Damit das Modul sichtbar ist und zusammen mit den anderen gepflegt wird, tritt es ost/ostmodules bei:
- Das Repository klonen, einen Branch erstellen.
- Den eigenen Block in
CMakeLists.txthinzufügen, nach dem Vorbild eines einfachen bestehenden Moduls (zum Beispielosthello):
add_library(ostmonmodule SHARED
${CMAKE_CURRENT_SOURCE_DIR}/src/modules/monmodule/monmodule.h
${CMAKE_CURRENT_SOURCE_DIR}/src/modules/monmodule/monmodule.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/modules/monmodule/monmodule.qrc
)
target_link_libraries(ostmonmodule PRIVATE
${OST_LIBRARY_BASE} # ou ${OST_LIBRARIES} (base + indi) pour un IndiModule
Qt${QT_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::Concurrent
Qt${QT_VERSION_MAJOR}::Widgets
Threads::Threads
z
)
target_compile_definitions(ostmonmodule PRIVATE MONMODULE_MODULE)ostmonmodulezur Listeinstall(TARGETS ...)hinzufügen, etwas weiter unten in derselben Datei.- Eine Merge Request öffnen.
Jedes Modul wiederholt diesen Block von Hand — es gibt heute keine CMake-Funktion, die ihn faktorisiert. Den Block eines bereits ähnlichen Moduls zu kopieren (ein IndiModule für ein IndiModule, zum Beispiel osthelloindi) vermeidet Versehen sicherer, als ihn von Null an neu zu schreiben.