2012-08-08 8 views
6

C'è un modo per impedire a CMake di creare un collegamento simbolico per librerie condivise come libfoo.so quando si utilizza so-versioning (il che significa che si avrebbe qualcosa come libfoo.so.0.8)?Come impedire a CMake di creare un collegamento simbolico per le librerie condivise al momento dell'installazione?

Il motivo per cui sto chiedendo questo è che ho un progetto in cui vorrei rendere installabili più versioni di quel progetto in parallelo. La maggior parte dei gestori di pacchetti respinge tuttavia un'installazione parallela se un file come il collegamento simbolico è presente in più pacchetti.

Come informazioni di base: stiamo usando CPack per costruire i pacchetti e, in definitiva, penso che sia un difetto di CPack che non puoi impedire questo link simbolico o almeno essere in grado di separare i pacchetti di sviluppo e di runtime, ad es. per debian. Tuttavia, finora ho le illusioni che solo impedendo a CMake di creare il collegamento simbolico potrebbe essere la cosa più facile da fare che applicare patch a CPack.

risposta

10

Per le librerie condivise è possibile utilizzare l'opzione NAMELINK_SKIP di install command per impedire la generazione del collegamento simbolico del nome di libreria senza versione al file di libreria versione. Il programma di installazione CPack generato renderà onore all'impostazione al momento dell'installazione. La versione della libreria è a specificato impostando la proprietà SOVERSION del target libreria condivisa:

Il codice di esempio seguente abbozza i passaggi necessari:

add_library(foo SHARED foo.c) 

set_target_properties(foo PROPERTIES SOVERSION "0.8") 

install(TARGETS foo LIBRARY DESTINATION lib NAMELINK_SKIP) 

include(CPack)