Объединение нескольких статических библиотек в одну с использованием CMake
У меня очень похожая проблема с однимописано в списке рассылки cmake, где у нас есть проект, зависящий от многих статических библиотек (все собраны из исходного кода в отдельных подмодулях, каждый со своим собственным CMakeLists.txt, описывающим процесс сборки для каждой библиотеки), который я хотел бы объединить в одну статическую библиотека для выпуска потребителям. Зависимости моей библиотеки могут быть изменены, и я не хочу обременять разработчиков этими изменениями. Аккуратным решением было бы объединить все библиотеки в одну библиотеку.
Интересно, чтоtarget_link_libraries
Команда не объединяет всю статику при установке цели наmylib
и используя это так. ,
target_link_libraries(mylib a b c d)
Однако, странно, если я сделаюmylib
проецировать подмодуль исполняемого проекта и ссылаться только наmylib
в исполняемом файле верхнего уровня CMAkeLists.txt библиотека выглядит объединенной. То есть mylib - 27 МБ, вместо 3 МБ, когда я устанавливаю цель только для сборкиmylib
.
Существуют решения, описывающие распаковку библиотек в объектные файлы и рекомбинацию (Вот, а такжеВот), но это кажется очень неуклюжим, когда CMake, кажется, вполне способен автоматически объединять библиотеки, как описано в приведенном выше примере. Это волшебная команда, которую я пропускаю, или рекомендуемый элегантный способ создания библиотеки релизов?