Как статически связать два подпроекта с основным проектом, когда подпроекты вызывают динамически библиотеки

0

У меня есть проект с двумя подкаталогами (проектами) внутри моего каталога с собственными файлами CMakeLists.txt, такими как

main_dir:
   CMakeLists.txt
   src/

   dir_one/
      CMakeLists.txt
      src/

   dir_two/
      CMakeLists.txt
      src/

Мой CMakeLists.txt выглядит так:

.....
    target_link_libraries (
        main
        /usr/lib/dir_one.so
        /usr/lib/dir_two.so
    )

Как сделать, чтобы dir_one и dir_two были созданы статическими внутри основной сборки, чтобы их легко развернуть? (Чтобы связать статически с основным).

  • 0
    Не добавляйте пути к .so в командной строке компоновщика. Если библиотеки создаются другими проектами, просто добавьте проекты и позвольте CMake использовать соответствующие флаги. Если нет, используйте соответствующий флаг -l . Библиотека поиска магии несколько хрупкая, и это стандартный способ.
Теги:
cmake

1 ответ

2

Просто используйте имя проекта в target_link_libraries, а не файл.so. CMake правильно устанавливает все зависимости и связывает их вывод.

target_link_libraries(main dir_one dir_two)

Цитата из документа:

Если имя библиотеки совпадает с именем другой цели в проекте, зависимость автоматически добавится в систему сборки, чтобы убедиться, что связанная библиотека обновлена до целевых ссылок. Имена элементов, начинающиеся с -, но не -l или -framework, рассматриваются как флаги компоновщика.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню