Build e integrare il proprio modulo
Scrivere il codice di un modulo non dice nulla su come viene buildato — e due approcci, molto diversi, sono altrettanto legittimi secondo ciò che si intende farne.
Lavorare per proprio conto
Nulla obbliga a passare per il repository ost/ostmodules: un modulo può vivere nel proprio repository, con il proprio CMakeLists.txt, ispirandosi a quello di ost/ostmodules piuttosto che copiandolo servilmente. Due informazioni bastano a ritrovare un’installazione OST reale:
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 fa esattamente questo in cmake_modules/FindOSTSERVER.cmake — ripartendo da questo file piuttosto che indovinarlo, il più semplice è ancora leggerlo direttamente.
Per un modulo puramente Basemodule, è necessario solo OST_LIBRARY_BASE; OST_LIBRARY_INDI serve solo per un IndiModule.
Contribuire al repository condiviso
Perché il modulo sia visibile e mantenuto insieme agli altri, si unisce a ost/ostmodules:
- Clonare il repository, creare un branch.
- Aggiungere il proprio blocco in
CMakeLists.txt, sul modello di un modulo esistente semplice (osthelloper esempio):
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)- Aggiungere
ostmonmodulealla listainstall(TARGETS ...), un po’ più in basso nello stesso file. - Aprire una merge request.
Ogni modulo ripete questo blocco a mano — oggi non esiste alcuna funzione CMake che lo fattorizzi. Copiare il blocco di un modulo già simile (un IndiModule per un IndiModule, per esempio osthelloindi) evita le omissioni più sicuramente che riscriverlo da zero.