LINK_LIBRARIES_ONLY_TARGETS
Добавлена в версии 3.23.
Требовать, чтобы элементы связи, которые могут быть именами целевых объектов, фактически были существующими целевыми объектами.
Установите это свойство в истинное значение, чтобы включить дополнительные проверки содержимого свойств целевых объектов LINK_LIBRARIES и INTERFACE_LINK_LIBRARIES, обычно заполняемых с помощью target_link_libraries(). Проверки также применяются к библиотекам, добавленным в целевой объект через свойства зависимостей INTERFACE_LINK_LIBRARIES_DIRECT. CMake проверит, что элементы связи, которые могут быть именами целевых объектов, фактически указывают на существующие целевые объекты. Элемент считается возможным именем целевого объекта, если:
- он не содержит
/или\, и - он не начинается с
-, и - (по историческим причинам) он не начинается с
$или`.
Это свойство инициализируется значением переменной CMAKE_LINK_LIBRARIES_ONLY_TARGETS при создании неимпортируемого целевого объекта. Свойство может быть явно включено для импортируемого целевого объекта, чтобы проверить его интерфейс связи.
В следующем примере CMake завершит работу с ошибкой на этапе конфигурации, потому что miLib не является целевым объектом:
set(CMAKE_LINK_LIBRARIES_ONLY_TARGETS ON) add_library(myLib STATIC myLib.c) add_executable(myExe myExe.c) target_link_libraries(myExe PRIVATE miLib) # typo for myLib
Для того, чтобы связать библиотеки, предоставляемые инструментом сборки, по имени, сохраняя при этом LINK_LIBRARIES_ONLY_TARGETS, используйте импортированную библиотеку интерфейса со свойством целевого объекта IMPORTED_LIBNAME:
add_library(toolchain::m INTERFACE IMPORTED) set_property(TARGET toolchain::m PROPERTY IMPORTED_LIBNAME "m") target_link_libraries(myExe PRIVATE toolchain::m)
См. также политику CMP0028.
Примечание
Если INTERFACE_LINK_LIBRARIES содержит выражения генератора, его фактический список элементов связи может зависеть от типа и свойств целевого объекта, который его потребляет. В таких случаях CMake может не всегда обнаруживать имена отсутствующих целевых объектов, которые появляются только для конкретных потребителей. Будущая версия CMake с улучшенными эвристиками может начать генерировать ошибки в проектах, которые принимались предыдущими версиями CMake.
© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.31/prop_tgt/LINK_LIBRARIES_ONLY_TARGETS.html