introducción de cpack y método de paquete deb

introducción de cpack

CPack es un componente de CMake que se utiliza para crear paquetes de software. Puede empaquetar proyectos de CMake en varios formatos de paquete diferentes, como ZIP, TGZ, RPM, DEB, etc. CPack puede detectar automáticamente su sistema y seleccionar automáticamente el formato de paquete apropiado según su sistema. CPack también proporciona muchas opciones para que pueda personalizar el proceso de generación de paquetes.

CPack se integra a la perfección con CMake, por lo que puede usar la sintaxis de CMake para especificar archivos, directorios y otros recursos para incluir en su paquete. Puede usar variables y funciones de CMake para especificar los metadatos del paquete, como el nombre del paquete, la versión, la descripción y más. CPack también proporciona muchas opciones para que pueda personalizar el proceso de generación de paquetes.

CPack admite muchos formatos de paquetes diferentes, incluidos ZIP, TGZ, RPM, DEB, NSIS, InnoSetup y más. CPack también admite formatos de paquetes personalizados, por lo que puede crear los suyos propios si lo desea.

Sintaxis básica de cpack

  • Después de configurar el embalaje, la ruta donde se almacena el paquete (esta ruta es relativa a la máquina empaquetada)
set(CPACK_PACKAGE_DIRECTORY ${CMAKE_SOURCE_DIR}/build/packages)
  • Establecer dependencias, que pueden activarse o no según la selección, y puede controlar la versión de los paquetes dependientes
option(DEPEND_ACE "depend ace" ON)
if(DEPEND_ACE)
    set(CPACK_DEBIAN_PACKAGE_DEPENDS "libace-dev(>=7.0)")
endif()
  • Establezca la ruta de la carpeta que se empaquetará en relación con la máquina donde está instalado el paquete, y configure los permisos de carpeta y archivo (por ejemplo, si una máquina ejecuta apt install para instalar el paquete, la ruta configurada aquí se basa en la carpeta instalada). máquina, y los permisos establecidos también se basan en la máquina)
install(DIRECTORY ${CMAKE_SOURCE_DIR}/scripts
        DESTINATION /test
        DIRECTORY_PERMISSIONS
            OWNER_READ OWNER_WRITE OWNER_EXECUTE
            GROUP_READ GROUP_EXECUTE
            WORLD_READ WORLD_EXECUTE
        FILE_PERMISSIONS
            OWNER_READ OWNER_WRITE OWNER_EXECUTE
            GROUP_READ GROUP_EXECUTE
            WORLD_READ WORLD_EXECUTE
)
  • Establecer la ruta de instalación de archivos binarios, bibliotecas estáticas y bibliotecas dinámicas
INSTALL(TARGETS myrun mylib mystaticlib
     RUNTIME DESTINATION bin
     LIBRARY DESTINATION lib
     ARCHIVE DESTINATION libstatic
    )

El binario ejecutable myrun está instalado en ${CMAKE_INSTALL_PREFIX}/binel directorio.
La biblioteca dinámica libmylib está instalada en ${CMAKE_INSTALL_PREFIX}/libel directorio.
La biblioteca estática libmystaticlib está instalada en ${CMAKE_INSTALL_PREFIX}/libstaticel directorio.

  • Establecer la ruta de instalación del programa ejecutable
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/control DESTINATION opt/omatrix/bin)

se controlinstalará /opt/omatrix/binbajo

  • Especifique la secuencia de comandos que se ejecutará después de instalar el paquete (la ubicación donde se almacena la secuencia de comandos se basa en la máquina empaquetada y el contenido interno se basa en la máquina donde está instalado el paquete)
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/scripts/postinst")

Hay cuatro tipos de secuencias de comandos en total: preinst(ejecutar antes de la instalación), postinst(ejecutar después de la instalación), prerm(ejecutar antes de la eliminación), postrm(ejecutar después de la eliminación)
también preste atención al permiso de estas secuencias de comandos, no use chmod u+x para otorgar permisos, es mejor usar chmod 0777.
El contenido del script aquí no puede ejecutar comandos como apt install. Durante la prueba, se descubrió que causaría un punto muerto

  • Ejecute algunos comandos de shell durante la instalación (según la máquina del paquete de instalación)
install(CODE "EXECUTE_PROCESS(COMMAND cp -r /opt/omatrix/lib ${CMAKE_SOURCE_DIR})")
install(CODE "execute_process(COMMAND rm -rf ${CMAKE_SOURCE_DIR}/lib/.svn ${CMAKE_SOURCE_DIR}/lib/capture/.svn)")
  • Establecer la información del mantenedor para el paquete.
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "cdy <[email protected]>")
  • Establecer el nombre del paquete, la versión, el tipo de paquete
set(CPACK_PACKAGE_NAME "ems")
set(CPACK_PACKAGE_VERSION "1.0.0") 
set(CPACK_GENERATOR "DEB") 
  • Esta oración se coloca al final del archivo CMakeLists.txt, nada menos
include(CPack)

Supongo que te gusta

Origin blog.csdn.net/QAZ600888/article/details/130922228
Recomendado
Clasificación