Объединение нескольких статических библиотек в одну с использованием 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, кажется, вполне способен автоматически объединять библиотеки, как описано в приведенном выше примере. Это волшебная команда, которую я пропускаю, или рекомендуемый элегантный способ создания библиотеки релизов?

Ответы на вопрос(3)

Ваш ответ на вопрос