2016-05-25 2 views
0

Я пытаюсь создать приложение linux, которое использует ICU. Хотя библиотека ICU, как правило, доступна для большинства дистрибутивов Linux, я недавно узнал, что это обычно not binary compatible между версиями. Я думаю, что самый простой путь вперед - развернуть ICU с моим приложением, чтобы все зависимости удовлетворялись при установке.Как развернуть библиотеки ICU с помощью CMake?

Мой вопрос: как я могу это сделать с помощью CMake? Я попытался следующие:

find_library(ICUIL18N_LIB icui18n) 
find_library(ICUUC_LIB icuuc) 
find_library(ICUDATA_LIB icudata) 

#link pthread and ICU against the library 
target_link_libraries(MyApp pthread rt ${ICUIL18N_LIB} ${ICUUC_LIB}) 

install(FILES ${ICUIL18N_LIB} ${ICUUC_LIB} ${ICUDATA_LIB} 
     DESTINATION lib) 

Это, кажется, работает, однако, когда я анализирую свой сгенерированный пакет, я в конечном итоге мое приложение ожидает эти библиотеки:

libicui18n.so.50 => /lib/libicui18n.so.50 (0xf74ee000) 
libicuuc.so.50 => /lib/libicuuc.so.50 (0xf737b000) 

Но файлы, входящие в мои пакеты просто символьные ссылки с именами, которые даже не совпадают:

/lib/libicui18n.so -> libicui18n.so.50.1.2 
/lib/libicuuc.so -> libicuuc.so.50.1.2 
/lib/libicudata.so -> libicudata.so.50.1.2 

есть ли способ для меня, чтобы получить фактические полностью связанные пути от моей цели с помощью CMake, так что я могу установить нужные файлы?

Есть ли другой механизм, который я должен использовать для этого? Я видел плагин «BundleUtilities», но инструкции не ясны, и я не уверен, что он применим к этой ситуации.

ответ

1

Я закончил прямо «поиск» символических ссылок ICU и фактических файлов библиотеки, а затем их установку. Не очень элегантный, но работал в моих целях. К сожалению, это потребует модификации в любое время, когда я меняю версии ICU.

set(ICU_MAJOR_VER "57") 
set(ICU_FULL_VERSION "${ICU_MAJOR_VER}.1") 


find_library(ICUIL18N_LIB libicui18n.so.${ICU_FULL_VERSION} PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/ NO_DEFAULT_PATH) 
find_library(ICUUC_LIB libicuuc.so.${ICU_FULL_VERSION} PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/ NO_DEFAULT_PATH) 
find_library(ICUDATA_LIB libicudata.so.${ICU_FULL_VERSION} PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/ NO_DEFAULT_PATH) 

find_library(ICUIL18N_MAJOR_LIB libicui18n.so.${ICU_MAJOR_VER} PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/ NO_DEFAULT_PATH) 
find_library(ICUUC_MAJOR_LIB libicuuc.so.${ICU_MAJOR_VER} PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/ NO_DEFAULT_PATH) 
find_library(ICUDATA_MAJOR_LIB libicudata.so.${ICU_MAJOR_VER} PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/ NO_DEFAULT_PATH) 

install(FILES ${ICUIL18N_LIB} ${ICUUC_LIB} ${ICUDATA_LIB} 
       ${ICUIL18N_MAJOR_LIB} ${ICUUC_MAJOR_LIB} ${ICUDATA_MAJOR_LIB} 
     DESTINATION lib) 
Смежные вопросы