Я ищу хороший способ обработки связанных libs в cmake. В моем случае файл конфигурации cmake (CMakeLists.txt) выполняется в средах Linux и на cygwin в Windows. Процесс сборки содержит две библиотеки. libA создается из источников и зависит только от std. C API. libB также создается из источников и включает libA. Библиотеки создаются отдельно (с собственным git-воспроизведением).Как искать библиотеки в мультиплатформенных сборках cmake?
Определяя в CMake в "libB/CMakeLists.txt"
find_library (libB A)
Я связывая libB против Либа. При связывании под cygwin эта строка терпит неудачу. Когда я меняю его на
find_library (libB ${CMAKE_LIBRARY_PATH}/static/libA.dll.a)
это работает.
Обе библиотеки создаются как общие библиотеки.
"Либа/CMakeLists.txt":
add_library(libA SHARED ${libA_source})
install(
TARGETS libA
RUNTIME DESTINATION ${CMAKE_INSTALL_FULL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/static
)
и
"libB/CMakeLists.txt":
add_library(libB SHARED ${libB_source})
install(
TARGETS libB
RUNTIME DESTINATION ${CMAKE_INSTALL_FULL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/static
)
Под Linux это работает отлично. Библиотеки размещаются в «/ user/local/lib». В Windows libs помещаются в «/ user/local/lib/shared» +, dll помещаются в «/ user/local/bin».
Заявление связать libB против Lība изменения в («libB/CMakeLists.txt»):
if (UNIX)
find_library (libB A)
elseif (CYGWIN)
find_library (libB ${CMAKE_LIBRARY_PATH}/static/libA.dll.a)
endif()
Любая идея, как обрабатывать ссылки компоновщика этих двух строит в простом - может быть, - не зависит от платформы линия?
Вместо 'find_library' называть это должно быть' target_link_libraries', не Это? – Tsyvarev
Lib A и B зависят, но строятся отдельно. Нет возможности использовать target_link_libraries для связывания проектов. –
Вы, должно быть, неправильно поняли назначение команд. Target_link_libraries используется для компиляции библиотек, которые создает проект. Find_library - поиск внешних библиотек. Вы смешиваете их. – usr1234567