Spec-Zone.ru › CMake 3.29

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.29/prop_tgt/LINK_LIBRARIES_ONLY_TARGETS.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API