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:

  1. Clonar el repositorio, crear una rama.
  2. 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)
  1. Añadir ostmonmodule a la lista install(TARGETS ...), un poco más abajo en el mismo archivo.
  2. Abrir una merge request.
Sin función/macro compartida entre los bloques

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.