Spec-Zone.ru › CMake 3.21

target_link_options

Новое в версии 3.13.

Добавление опций к шагу компоновки для исполняемого файла, динамической библиотеки или библиотеки модулей.

target_link_options(<target> [BEFORE]
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])

Именуемый <target> должен быть создан командой, такой как add_executable() или add_library(), и не должен быть целевым объектом типа ПСЕВДОНИМ.

Эта команда может быть использована для добавления любых опций компоновки, но существуют альтернативные команды для добавления библиотек (target_link_libraries() или link_libraries()). Обратитесь к документации свойств directory и target LINK_OPTIONS.

Примечание

Эта команда не может быть использована для добавления опций для целевых объектов статических библиотек, поскольку они не используют компоновщик. Для добавления флагов архиватора или компоновщика MSVC см. свойство целевого объекта STATIC_LIBRARY_OPTIONS.

Если BEFORE указано, содержимое будет добавлено в начало свойства, а не в конец.

Ключевые слова INTERFACE, PUBLIC и PRIVATE необходимы для указания области действия последующих аргументов. PRIVATE и PUBLIC элементы будут заполнять свойство LINK_OPTIONS целевого объекта <target>. PUBLIC и INTERFACE элементы будут заполнять свойство INTERFACE_LINK_OPTIONS целевого объекта <target>. Следующие аргументы задают опции компоновки. Повторные вызовы для одного и того же <target> добавляют элементы в порядке вызова.

Примечание

Импортированные целевые объекты поддерживают только INTERFACE элементы.

Аргументы для target_link_options могут использовать "генераторские выражения" с синтаксисом $<...>. См. руководство cmake-generator-expressions(7) для доступных выражений. См. руководство cmake-buildsystem(7) для более подробной информации об определении свойств системы построения.

Опции компоновки для хоста и устройства

Новое в версии 3.18: Когда участвует шаг компоновки устройства, управляемый свойствами CUDA_SEPARABLE_COMPILATION и CUDA_RESOLVE_DEVICE_SYMBOLS, а также политикой CMP0105, исходные опции будут переданы шагам компоновки хоста и устройства (упакованные в -Xcompiler или эквивалентные для компоновки устройства). Опции, заключенные в $<DEVICE_LINK:...> generator expression, будут использоваться только для шага компоновки устройства. Опции, заключенные в $<HOST_LINK:...> generator expression, будут использоваться только для шага компоновки хоста.

Устранение дублирования опций

Конечный набор опций, используемых для целевого объекта, строится путем накопления опций из текущего целевого объекта и требований использования его зависимостей. Набор опций дедублицируется, чтобы избежать повторений.

Новое в версии 3.12: Хотя это полезно для отдельных опций, шаг дедупликации может разбить группы опций. Например, -option A -option B превращается в -option A B. Можно указать группу опций, используя оболочковые кавычки вместе с префиксом SHELL:. Префикс SHELL: удаляется, а остальная часть строки опции анализируется в режиме separate_arguments() UNIX_COMMAND. Например, "SHELL:-option A" "SHELL:-option B" превращается в -option A -option B.

Обработка различий в компиляторах

Для передачи опций компоновщику каждый компилятор имеет свой собственный синтаксис. Префикс LINKER: и разделитель , могут быть использованы для задания, переносимым способом, опций для передачи компоновщику. LINKER: заменяется соответствующей опцией компилятора, а , — соответствующим разделителем. Префикс и разделитель компилятора задаются значениями переменных CMAKE_<LANG>_LINKER_WRAPPER_FLAG и CMAKE_<LANG>_LINKER_WRAPPER_FLAG_SEP.

Например, "LINKER:-z,defs" превращается в -Xlinker -z -Xlinker defs для Clang и -Wl,-z,defs для GNU GCC.

Префикс LINKER: может быть задан как часть выражения префикса SHELL:.

Префикс LINKER: поддерживает, как альтернативный синтаксис, указание аргументов с помощью префикса SHELL: и пробела в качестве разделителя. Тогда предыдущий пример превращается в "LINKER:SHELL:-z defs".

Примечание

Указание префикса SHELL: в любом месте, кроме начала префикса LINKER:, не поддерживается.

© 2000–2021 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.21/command/target_link_options.html

Spec-Zone.ru

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