2012-08-08 16 views
6

Czy istnieje sposób, aby uniemożliwić programowi CMake tworzenie dowiązania symbolicznego do bibliotek współużytkowanych, takich jak libfoo.so, gdy używasz wersji w wersji tak (co oznacza, że ​​masz coś takiego jak libfoo.so.0.8)?Jak zapobiec tworzeniu przez CMake dowiązania symbolicznego dla bibliotek współdzielonych podczas instalacji?

Powodem, dla którego o to pytam, jest to, że mam projekt, w którym chciałbym, aby równolegle można było instalować wiele wersji tego projektu. Większość menedżerów pakietów odrzuca jednak równoległą instalację, jeśli plik taki jak dowiązanie symboliczne występuje w wielu pakietach.

Jako informacja dodatkowa: używamy CPack do budowania pakietów i ostatecznie uważam, że jest to wadą CPack, że nie można zapobiec temu dowiązaniu symbolicznemu lub przynajmniej można oddzielić pakiety deweloperskie i uruchomieniowe, np. dla debiana. Jednak, jak dotąd, mam złudzenia, że ​​samo zapobieganie tworzeniu przez CMake dowiązania symbolicznego może być łatwiejsze niż łatanie CPack.

Odpowiedz

10

Dla bibliotek współużytkowanych można użyć opcji NAMELINK_SKIP z install command, aby zapobiec generowaniu linku symbolicznego nazwy wersji bez biblioteki do wersjonowanego pliku biblioteki. Wygenerowany instalator CPack będzie honorował to ustawienie podczas instalacji. Wersja biblioteki musi określony przez ustawienie właściwości SOVERSION udostępnionej biblioteki cel:

Poniższy przykładowy kod szkice wymaganych czynności:

add_library(foo SHARED foo.c) 

set_target_properties(foo PROPERTIES SOVERSION "0.8") 

install(TARGETS foo LIBRARY DESTINATION lib NAMELINK_SKIP) 

include(CPack)