LINK_LIBRARIES_ONLY_TARGETS
Добавлено в версии 3.23.
Проверяет, что элементы связи, которые могут быть именами целей, действительно являются существующими целями.
Задайте для этого свойства значение true, чтобы включить дополнительные проверки содержимого свойств целевых объектов 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–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/prop_tgt/LINK_LIBRARIES_ONLY_TARGETS.html