Compilar e integrar su módulo
Escribir el código de un módulo no dice nada sobre cómo se compila — y dos enfoques, muy distintos, son igualmente legítimos según lo que se piense hacer con él.
Trabajar por su cuenta
Nada obliga a pasar por el repositorio ost/ostmodules: un módulo puede vivir en su propio repositorio, con su propio CMakeLists.txt, inspirándose en el de ost/ostmodules en lugar de copiarlo al pie de la letra. Dos informaciones bastan para encontrar una instalación OST real:
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 hace exactamente eso en cmake_modules/FindOSTSERVER.cmake — partiendo de este archivo en lugar de adivinarlo, lo más simple sigue siendo leerlo directamente.
Para un módulo puramente Basemodule, solo se necesita OST_LIBRARY_BASE; OST_LIBRARY_INDI solo es necesario para un IndiModule.
Contribuir al repositorio compartido
Para que el módulo sea visible y mantenido junto con los demás, se une a ost/ostmodules:
- Clonar el repositorio, crear una rama.
- Añadir su propio bloque en
CMakeLists.txt, siguiendo el modelo de un módulo existente simple (osthello, por ejemplo):
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)- Añadir
ostmonmodulea la listainstall(TARGETS ...), un poco más abajo en el mismo archivo. - Abrir una merge request.
Cada módulo repite este bloque a mano — hoy no existe ninguna función CMake que lo factorice. Copiar el bloque de un módulo ya cercano (un IndiModule para un IndiModule, por ejemplo osthelloindi) evita olvidos de forma más segura que reescribirlo desde cero.