Builder et intégrer son module
Écrire le code d’un module ne dit rien de comment il est buildé — et deux approches, très différentes, sont également légitimes selon ce qu’on compte en faire.
Travailler dans son coin
Rien n’oblige à passer par le dépôt ost/ostmodules : un module peut vivre dans son propre dépôt, avec son propre CMakeLists.txt, en s’inspirant de celui d’ost/ostmodules plutôt qu’en le copiant servilement. Deux informations suffisent à retrouver une installation OST réelle :
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 fait exactement ça dans cmake_modules/FindOSTSERVER.cmake — en repartant de ce fichier plutôt que de le deviner, le plus simple est encore de le lire directement.
Pour un module purement Basemodule, seul OST_LIBRARY_BASE est nécessaire ; OST_LIBRARY_INDI ne l’est que pour un IndiModule.
Contribuer au dépôt partagé
Pour que le module soit visible et maintenu avec les autres, il rejoint ost/ostmodules :
- Cloner le dépôt, créer une branche.
- Ajouter son propre bloc dans
CMakeLists.txt, sur le modèle d’un module existant simple (osthellopar exemple) :
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)- Ajouter
ostmonmoduleà la listeinstall(TARGETS ...), un peu plus bas dans le même fichier. - Ouvrir une merge request.
Chaque module répète ce bloc à la main — il n’y a aujourd’hui aucune fonction CMake qui le factorise. Copier le bloc d’un module déjà proche (un IndiModule pour un IndiModule, par exemple osthelloindi) évite les oublis plus sûrement que le réécrire de zéro.