CMake :как создать единую общую библиотеку из всех статических библиотек подпроектов?

У меня есть следующий макет:

top_project
    + subproject1
    + subproject2

Каждый из subproject1и subproject2создает статическую библиотеку. Я хотел бы связать эти статические библиотеки в одну общую библиотеку на уровне top_project.

Информация, которую я собрал до сих пор,:

  • Либо скомпилируйте с помощью-fPic(необходим во всем, кроме Windows ), чтобы создать позиционно -независимый код, который позволит связать статические библиотеки в одну общую библиотеку или распаковать все статические библиотеки (, например. используяar)и повторно -связать их с общей библиотекой (, что я считаю неэлегантным и не -переносимым решением)
  • Все исходные файлы должны быть явно переданы команде add_library:по какой-то причине, которую я не могу понять, просто запись add_library(${PROJECT_NAME} SHARED subproject1 subproject2)не работает должным образом (по существу создается пустая библиотека и не регистрируются зависимости должным образом)
  • В CMake есть функция библиотеки OBJECT, но я не думаю, что ее цель действительно делать то, что я хочу.

есть идеи?

50
задан Deimos 10 July 2012 в 22:00
поделиться