2010-07-28 6 views
18

Sto usando CMake per creare un programma su linux. Il programma viene compilato correttamente e viene eseguito dalla directory di creazione del progetto. Il programma è collegato con una libreria personalizzata nella directory ${HOME}/build/libLa creazione di binari con CMake rimuove il percorso di runtime

ho una fase di installazione con:

install(TARGETS ProgName RUNTIME DESTINATION bin) 

Quando eseguo make install il programma viene messo nel posto giusto, ma il programma di installazione cmake rimuove il runtime percorso dal binario.

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

Ho letto articoli su internet a discutere l'uso improprio della variabile LD_LIBRARY_PATH così mi piace tenere il mio limitato a posizioni delle librerie di sistema, se possibile. Non sono sysadmin quindi non posso aggiungere la posizione al percorso di ricerca del linker predefinito.

Qualcuno sa come posso mantenere i percorsi di collegamento in fase di sviluppo durante l'installazione o almeno la personalizzazione dei percorsi aggiunti al runtime?

Acclamazioni

risposta

9

Nota: se non si desidera modificare le loro cmake script, impostando la proprietà intorno, è possibile avviare Si cmake con una direttiva che chiede di non rimuovere il percorso di runtime:
Vedere "Variables that Control the Build", con variabile: "CMAKE_SKIP_RPATH"

Se vero, non aggiungere informazioni sul percorso di esecuzione.

Se questo è impostato su TRUE, le informazioni di percorso non vengono aggiunte agli eseguibili compilati.
L'impostazione predefinita è di aggiungere informazioni sul percorso se la piattaforma lo supporta. Ciò consente una facile esecuzione dall'albero di build.
Per omettere RPATH nel passaggio di installazione, ma non il passaggio di generazione, utilizzare invece CMAKE_SKIP_INSTALL_RPATH.

Se le consegne già contenevano il percorso runtime destra, tale direttiva eviterà cmake di fare qualsiasi modifica al percorso runtime corrente inclusi in detto consegne.

cmake -DCMAKE_SKIP_RPATH=ON xxx.cmake 
+2

Super! Grazie, molto meglio della prima risposta! – Davide

+0

+1, grazie per questa risposta, esattamente quello che stavo cercando, cioè rendere CMake * comportarsi come dovrebbe essere fatto di default! –

0

Questo funziona per CMake 2.8

set_target_properties(foo PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) 

dove foo è l'obiettivo definito in precedenza:

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

Prima

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

Dopo

% 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" 
Problemi correlati