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–2022 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.23/command/target_link_options.html