2010-07-28 5 views
18

Estoy usando CMake para crear un programa en Linux. El programa compila con éxito y se ejecuta desde el directorio de compilación del proyecto. El programa está vinculado con una biblioteca personalizada en el directorio ${HOME}/build/libCrear binario con CMake elimina la ruta de tiempo de ejecución

Tengo una fase de instalación con:

install(TARGETS ProgName RUNTIME DESTINATION bin) 

Cuando corro make install el programa se puso en el lugar correcto, pero el cmake instalador elimina el tiempo de ejecución camino desde el binario.

-- Install configuration: "Debug" 
-- Installing: *binary name* 
-- Removed runtime path from "*binary name*" 

He leído artículos en internet discutir el mal uso de la variable LD_LIBRARY_PATH lo que me gusta de mantener la mina limitada a ubicaciones de la biblioteca del sistema, si es posible. No soy administrador de sistema, por lo que tampoco puedo agregar la ubicación a la ruta de búsqueda del vinculador predeterminado.

¿Alguien sabe cómo puedo mantener las rutas de enlace de tiempo de desarrollo al instalar o al menos personalizar qué rutas se agregan al tiempo de ejecución?

Saludos

Respuesta

9

Nota: si no desea modificar los scripts de cmake sí mismos, estableciendo la propiedad alrededor, puede iniciar cmake con una directiva que solicita no eliminar la ruta de tiempo de ejecución:
Ver "Variables that Control the Build", con la variable: "CMAKE_SKIP_RPATH"

Si es verdadero, no agregue información de ruta de tiempo de ejecución.

Si esto se establece en TRUE, la información de rpath no se agrega a los ejecutables compilados.
El valor predeterminado es agregar información de ruta si la plataforma lo admite. Esto permite una ejecución fácil desde el árbol de compilación.
Para omitir RPATH en el paso de instalación, pero no en el paso de compilación, use CMAKE_SKIP_INSTALL_RPATH.

Si las entregas ya contenían la vía de ejecución, la derecha, la misma Directiva evitará cmake a realizar cualquier modificación a la actual vía de ejecución, incluida en dicho entregas.

cmake -DCMAKE_SKIP_RPATH=ON xxx.cmake 
+2

Super! ¡Muchas gracias, mucho mejor que la primera respuesta! – Davide

+0

+1, gracias por esta respuesta, exactamente lo que estaba buscando, es decir, ¡haga que CMake * se comporte * como debería estar haciendo de forma predeterminada! –

0

Esto funciona para CMake 2.8

set_target_properties(foo PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) 

donde foo es el objetivo que ha definido anteriormente:

project(foo) 
add_executable(foo ...) 
    ... 
install(TARGETS foo DESTINATION bin) 
    ... 

Antes

% sudo make install 
Install the project... 
-- Install configuration: "" 
-- Installing: /opt/mystuff/bin/foo 
-- Removed runtime path from "/opt/mystuff/bin/foo" 

Después

% sudo make install 
Install the project... 
-- Install configuration: "" 
-- Installing: /opt/mystuff/bin/foo 
-- Set runtime path of "/opt/mystuff/bin/foo" to "/opt/zzyzx/lib:/opt/bar/lib/x86_64" 
Cuestiones relacionadas