Я пытаюсь сделать так, чтобы другие проекты связывались с разделяемыми библиотеками, которые мы распространяем с нашим проектом. Когда я пытаюсь использовать механизм EXPORT, CMake жалуется, что я не включаю статические библиотеки, используемые для создания разделяемых библиотек в наборе экспорта. Мне это кажется ненужным, так как другим проектам нужно только связать с общей библиотекой, и я действительно не хочу устанавливать статические библиотеки. Кажется, это очень похоже на this bug, но я могу просто не понимать, как все это работает. Вот минимальный пример:Почему CMake EXPORT требует статических библиотек, используемых для создания общей библиотеки?
CMAKE_MINIMUM_REQUIRED(VERSION 3.2.1)
PROJECT(ExportTest)
ADD_LIBRARY(myStaticLib STATIC staticLib.c)
ADD_LIBRARY(mySharedLib SHARED sharedLib.c)
TARGET_LINK_LIBRARIES(mySharedLib myStaticLib)
INSTALL(TARGETS mySharedLib EXPORT myExport DESTINATION lib)
INSTALL(EXPORT myExport DESTINATION include)
Что приводит следующее сообщение об ошибке:
CMake Error: install(EXPORT "myExport" ...) includes target "mySharedLib"
which requires target "myStaticLib" that is not in the export set.
Спасибо, что устраняет ошибку. Не могли бы вы помочь мне понять, почему вы хотите, чтобы статическая библиотека считалась зависимой от общей библиотеки? Это похоже на странное поведение по умолчанию. – rpmcnally
'target_link_libraries' не только управляет зависимостями для связи, но и для включения. Учитывая, что ссылка на статическую библиотеку означает, что разделяемая библиотека не будет включать заголовки статического в своем открытом интерфейсе, это очень сильный априори. Разработчики cmake предпочли быть агностиком в этой точке, предоставляя явную подпись для контроля зависимости – wasthishelpful