CMake автоматически связывает внешние зависимости библиотеки - PullRequest
0 голосов
/ 08 сентября 2011

Я сейчас занимаюсь разработкой библиотеки, HAMMER , и использую CMake в качестве своей системы сборки. Я нахожусь в процессе интеграции YARP, который также использует CMake в качестве своей системы сборки. Следовательно, я импортирую YARP, используя стандартный метод CMake, т.е. указывая CMake на файл YARPConfig.cmake, который был сгенерирован во время компиляции YARP и использующий YARP_LIBRARIES и YARP_INCLUDE_DIRS. Пока все хорошо.

Проблема в том, что на этапе компоновки (моей библиотеки) CMake автоматически связывается со всеми библиотеками, от которых зависит YARP. Например, YARP использует gsl, а моя библиотека - нет (в большинстве случаев он вызывает методы YARP, использующие gsl), однако gsl отображается в списке как одна из зависимостей ld моей библиотеки (используя ldd).

Это не является большой проблемой при использовании библиотек, которые находятся в пути к библиотеке по умолчанию, но если вам нужно связать библиотеку, которая не находится в пути к библиотеке (и которая не является частью вашего проекта), то связывание потерпит неудачу (так как нужная библиотека не будет найдена).

Это именно то, что происходит при попытке создать приложение, которое использует HAMMER (также с CMake), поскольку YARP не установлен в расположении по умолчанию, мое приложение пытается связываться с ним (согласно только что описанному поведению) и не удается, потому что он не может найти библиотеки YARP.

Кто-нибудь знает, почему у CMake такая политика? И, что более важно, есть ли способ обойти это, что не подразумевает импорт YARP в сценарии CMake приложения?

Спасибо!

1 Ответ

1 голос
/ 22 декабря 2011

См. CMake FAQ Почему библиотеки, связанные с моей общей библиотекой, включены, когда что-то ссылается на нее? . Если вы хотите предотвратить такое поведение, я думаю, что вы должны изменить свойство LINK_INTERFACE_LIBRARIES в YARP.

...