Spec-Zone.ru › CMake

IMPORTED_OBJECTS

Добавлен в версии 3.9.

Список абсолютных путей к объектным файлам на диске, разделённые точкой с запятой, для импортированной объектной библиотеки.

Игнорируется для неимпортированных целей.

Проекты могут пропустить IMPORTED_OBJECTS , если вместо этого установлено конфигурационно-зависимое свойство IMPORTED_OBJECTS_<CONFIG>, за исключением ситуаций, указанных в разделе ниже.

Учёт генератора Xcode

Добавлен в версии 3.20.

Для платформ Apple проект может быть скомпилирован для более чем одной архитектуры. Это контролируется переменной CMAKE_OSX_ARCHITECTURES. Для всех генераторов, кроме генератора Xcode, CMake вызывает компиляторы один раз на каждый исходный файл и передаёт несколько -arch флагов, что приводит к одному объектному файлу, который будет универсальной бинарной. Такие объектные файлы хорошо работают, когда они перечислены в IMPORTED_OBJECTS отдельной CMake сборки, даже для генератора Xcode. Но создание таких объектных файлов с генератором Xcode более сложно, так как он вызывает компилятор один раз на каждую архитектуру для каждого исходного файла. В отличие от других генераторов, он не генерирует универсальные бинарные файлы объектных файлов.

Ещё одной проблемой с генератором Xcode является то, что при нацеливании на платформы устройств (iOS, tvOS, visionOS или watchOS), генератор Xcode может использовать либо SDK устройства, либо SDK симулятора без необходимости повторного выполнения CMake. SDK можно выбрать во время сборки. Но поскольку некоторые архитектуры могут поддерживаться как SDK устройства, так и SDK симулятора (например, arm64 с Xcode 12 или более поздними версиями), не все комбинации могут быть представлены в одной универсальной бинарной. В этом случае единственным решением является наличие нескольких объектных файлов.

IMPORTED_OBJECTS не поддерживает выражения генератора, поэтому каждый перечисленный файл должен быть допустимым для каждой архитектуры и SDK. При включении объектных файлов, которые не являются универсальными бинарными, путь и/или имя файла каждого объектного файла должны каким-то образом содержать различные архитектуры и SDK. С генератором Xcode, переменные Xcode вида $(...) могут быть использованы для представления этих аспектов, и Xcode заменит соответствующие значения во время сборки. CMake не интерпретирует эти переменные и встраивает их без изменений в файл проекта Xcode. $(CURRENT_ARCH) может быть использован для представления архитектуры, а $(EFFECTIVE_PLATFORM_NAME) — для различения SDK.

Ниже приведён пример того, как эти две переменные могут быть использованы для ссылки на объектный файл, местоположение которого зависит как от SDK, так и от архитектуры:

add_library(someObjs OBJECT IMPORTED)

set_property(TARGET someObjs PROPERTY IMPORTED_OBJECTS
  # Quotes are required because of the ()
  "/path/to/somewhere/objects$(EFFECTIVE_PLATFORM_NAME)/$(CURRENT_ARCH)/func.o"
)

# Example paths:
#   /path/to/somewhere/objects-iphoneos/arm64/func.o
#   /path/to/somewhere/objects-iphonesimulator/x86_64/func.o

В некоторых случаях вам может потребоваться иметь конфигурационно-зависимые объектные файлы. Переменная Xcode $(CONFIGURATION) часто используется для этого и может быть использована совместно с другими, упомянутыми выше:

add_library(someObjs OBJECT IMPORTED)
set_property(TARGET someObjs PROPERTY IMPORTED_OBJECTS
  "/path/to/somewhere/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/$(CURRENT_ARCH)/func.o"
)

# Example paths:
#   /path/to/somewhere/Release-iphoneos/arm64/func.o
#   /path/to/somewhere/Debug-iphonesimulator/x86_64/func.o

При использовании любой переменной Xcode CMake не может полностью оценить путь(и) во время конфигурирования. Одним из следствий этого является то, что конфигурационно-зависимые свойства IMPORTED_OBJECTS_<CONFIG> не могут быть использованы, так как CMake не может определить, существует ли объектный файл в определённом <CONFIG> месте. Свойство IMPORTED_OBJECTS должно использоваться в этих ситуациях, а конфигурационно-зависимые аспекты пути должны обрабатываться переменной Xcode $(CONFIGURATION).

© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/prop_tgt/IMPORTED_OBJECTS.html

Spec-Zone.ru

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