¿Cómo puedo exportar las bibliotecas de las que depende una biblioteca cmake, de modo que un archivo ejecutable que depende de esa biblioteca no tenga que depender manualmente de las dependencias de esa biblioteca?¿Cómo se exporta una biblioteca del sistema usando cmake?
Eso es un poco de un bocado, así que aquí está un ejemplo:
ficticia (aplicación) ----> depende de la Liba
Liba ----> depende de libpng
Compilación ficticia genera errores:
-- Found LIBPNG
-- Found LIBA
-- Configuring done
-- Generating done
-- Build files have been written to: /home/doug/projects/dummy/build
Linking C executable dummy
../deps/liba/build/liba.a(a.c.o): In function `a_dummy':
/home/doug/projects/dummy/deps/liba/src/a.c:6: undefined reference to `png_sig_cmp'
collect2: ld returned 1 exit status
make[2]: *** [dummy] Error 1
make[1]: *** [CMakeFiles/dummy.dir/all] Error 2
make: *** [all] Error 2
que puede solución que mediante la adición de esto en CMakeLists.txt dummy:
TARGET_LINK_LIBRARIES (PNG ficticio)
Sin embargo, el muerto tiene ningún conocimiento de cómo Liba implementa su API. En algún punto que puede cambiar a ser libjpg, u otra cosa, que romperá la aplicación ficticia.
Después de conseguir la ayuda de la lista de correo cmake He sido dirigidos a este ejemplo de cosas que exportan: http://www.cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file
Sin embargo, después de que el enfoque me deja atrapado en esta línea:
exportación (OBJETIVOS $ {LIBPNG_LIBRARY} ARCHIVO "$ {PROJECT_BINARY_DIR} /ALibraryDepends.cmake")
Claramente me falta algo aquí; este comando 'exportar' parece diseñado para exportar subproyectos a un alto nivel; es decir. proyectos anidados dentro de liba.
Sin embargo, ese no es el problema aquí.
Al configurar liba (o cualquier biblioteca de cmake) siempre generaré una lista de dependencias que no son parte de ese proyecto.
¿Cómo puedo exportar esos para que aparezcan como parte de LIBA_LIBRARY cuando uso find_package() para resolver liba?
El uso de bibliotecas estáticas no es una opción (biblioteca estática de algo que enlaza con OpenGL? N.)
La instalación de las bibliotecas del sistema debe ser manejada por [package manager] (https://en.wikipedia.org/wiki/Package_manager) –