2012-08-08 12 views
6

¿Existe alguna manera de evitar que CMake cree un enlace simbólico para bibliotecas compartidas como libfoo.so cuando usa versiones de versiones (lo que significa que tiene algo así como libfoo.so.0.8)?¿Cómo evitar que CMake cree un enlace simbólico para bibliotecas compartidas durante la instalación?

La razón por la que estoy preguntando esto es porque tengo un proyecto en el que me gustaría hacer varias versiones de ese proyecto instalable en paralelo. Sin embargo, la mayoría de los administradores de paquetes rechazan una instalación paralela si un archivo como el enlace simbólico está presente en varios paquetes.

Como información general: estamos utilizando CPack para compilar paquetes y, en última instancia, creo que es un defecto de CPack que no puede evitar este enlace simbólico o al menos poder separar paquetes dev y runtime, p. para Debian Sin embargo, hasta ahora tengo la ilusión de que simplemente evitar que CMake cree el enlace simbólico podría ser lo más fácil de hacer que parchear CPack.

Respuesta

10

Para las bibliotecas compartidas, puede usar la opción NAMELINK_SKIP del install command para evitar la generación del enlace simbólico del nombre de la biblioteca sin versión al archivo de la biblioteca versionada. El instalador de CPack generado respetará esa configuración en la instalación. La versión de la biblioteca ha especificado que al establecer la propiedad SOVERSION del objetivo biblioteca compartida:

El siguiente código de ejemplo esboza los pasos necesarios:

add_library(foo SHARED foo.c) 

set_target_properties(foo PROPERTIES SOVERSION "0.8") 

install(TARGETS foo LIBRARY DESTINATION lib NAMELINK_SKIP) 

include(CPack) 
Cuestiones relacionadas