Вы всегда должны пытаться передать либо полные пути, либо цели CMake в target_link_libraries.
Поскольку вы, похоже, не создаете зависимость как часть проекта CMake, единственный способ получить цель CMake для ссылки - создать импортированную цель. Обычно это довольно утомительно для manuall, поэтому, если зависимость уже не предоставляет файл конфигурации с импортированной целью, вы, вероятно, не хотите идти по этой дороге. Импортированные цели наиболее удобны в использовании, но только если вы можете заставить CMake написать для вас.
Итак, это абсолютные пути. Очевидно, вы не захотите жестко кодировать абсолютные пути библиотеки в своих CMakeLists. Как указано в вашем вопросе, желаемое поведение заключается в том, что вы указываете только имя библиотеки, и CMake должен иметь возможность автоматически определять свое местоположение. Это именно то, что делает find_library
для вас.
Чтобы связать с библиотекой xxx
, вы могли бы сделать что-то вроде этого:
find_library(LIB_LOCATION xxx)
target_link_libraries(ExecutableName ${LIB_LOCATION})
Обратите внимание, что find_library
предоставляет множество возможностей для дальнейшего указать, где искать запрошенные библиотеки. Избавьтесь от существующего вызова link_directories
и добавьте соответствующие пути в качестве подсказок для find_library
.
Этот подход является более гибким при переносе вашего кода CMake на другие платформы и более легко отлаживается, если что-то пойдет не так, как ваш первоначальный подход.
Это не переносится ... – kyb