У меня есть проект с двумя подкаталогами (проектами) внутри моего каталога с собственными файлами 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 были созданы статическими внутри основной сборки, чтобы их легко развернуть? (Чтобы связать статически с основным).
Просто используйте имя проекта в target_link_libraries, а не файл.so. CMake правильно устанавливает все зависимости и связывает их вывод.
target_link_libraries(main dir_one dir_two)
Цитата из документа:
Если имя библиотеки совпадает с именем другой цели в проекте, зависимость автоматически добавится в систему сборки, чтобы убедиться, что связанная библиотека обновлена до целевых ссылок. Имена элементов, начинающиеся с -, но не -l или -framework, рассматриваются как флаги компоновщика.
.so
в командной строке компоновщика. Если библиотеки создаются другими проектами, просто добавьте проекты и позвольте CMake использовать соответствующие флаги. Если нет, используйте соответствующий флаг-l
. Библиотека поиска магии несколько хрупкая, и это стандартный способ.