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 или 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–2021 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.22/prop_tgt/IMPORTED_OBJECTS.html