Сводка
В настоящее время я пытаюсь создать библиотеку только для заголовков C ++ (17) для iOS. Эта библиотека должна выводить .framework, который должен использоваться в стандартном приложении iOS. Библиотека также (конечно) имеет другие зависимости, которые имеют исходные файлы.
Фон
Существующая установка использует Bazel, и до этого момента Tulsi использовала для интеграции, но теперь это должно измениться на версии версий библиотек (если Tulsi не может сгенерировать iOS .framework в комплекте с заголовочными файлами, которые я еще не видел - сообщите мне, если он существует).
Использование изначально ios_framework
из build_bazel_rules_apple , пока в документации не было ясно, что это должно использоваться только в пределах цели Bazel ios (то есть с использованием ios_application
) и что это не может быть затем извлечено и использовано отдельно в другом проекте.
Затем я повернулся к ios_static_framework
(также замечено в build_bazel_rules_apple ), который кажется быть правильным, однако я никогда не смогу заставить его поддерживать структуру заголовка.
В настоящее время
Bazel
Использование ios_static_framework
req Пользователь (очевидно) сначала оборачивает нормальный cc_library
objc_library
, который затем может быть помещен в deps
из ios_static_framework
, то есть
# BUILD example (assume all rules are loaded and WORKSPACE is setup correctly)
cc_library(
name = "somelib",
deps = [
"//otherlib0", # A sub part of the lib I am trying to build
"//otherlib1" # Another sub part of the lib I am trying to build
],
hdrs = glob(["**/*.h"]),
visibility=["//visibility:public"]
)
objc_library(
name = "somelibwrapperobjc",
deps = [
"//:somelib"
],
hdrs = glob(["**/*.h"]),
visibility=["//visibility:public"]
)
ios_static_framework(
name = "somelibidealoutput",
families = ["iphone"],
hdrs = glob(["**/*.h"]),
umbrella_header = "libheader.h",
deps = [
"//:somelibwrapperobjc"
]
)
Похоже, что он также собирается без cc_library шаг к тому же результату, и на выходе получается каталог с somelibidealoutput.framework
и заголовочным файлом libheader.h
, но все остальное пропало.
Так что ^^ не работает.
CMake
Итак, я попробовал CMake с нуля.
cmake_minimum_required(VERSION 3.1)
project(myproject C CXX)
include_directories(${PROJECT_SOURCE_DIR}/projectincludesadditional)
set(HEADER_FILES
myheader1.hpp
onelayer/myheader2.hpp
additional/header/myheader3.hpp
...
)
Затем я попытался Следующая часть двумя разными способами. Поскольку библиотеки CMake только для заголовков являются простыми, я попытался:
add_library(mylibrary INTERFACE)
target_include_directories(mylibrary INTERFACE ${HEADER_FILES})
, которые затем можно связать с реальной библиотекой, а также с другой альтернативой:
add_library(myconsuminglibrary SHARED
${HEADER_FILES})
. построено с использованием следующего:
set_target_properties(myconsuminglibrary PROPERTIES
FRAMEWORK TRUE
FRAMEWORK_VERSION CXX
LINKER_LANGUAGE CXX
MACOSX_FRAMEWORK_IDENTIFIER com.something.idontcare
MACOSX_FRAMEWORK_INFO_PLIST info.plist
VERSION 16.4.0
SOVERSION 1.0.0
PUBLIC_HEADER "myuselessumbrellaheaderthatdoesntpullanyotherheadersin.hpp"
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
)
Но заголовки не копируются поперек! только указанный заголовок publi c зонтик (и даже если там есть включение, оно не скопирует его, так как это не лексизирует файл.
Я следовал за возможным решением здесь (на cmake) в предложенных комментариях, но кажется, что он просто копирует один слой глубиной и снова удаляет структуру файла.
Должен ли я просто использовать простой install
и предполагать, что это лучший способ использования этих заголовков в фреймворке? По сути, скопируйте их и надейтесь на лучшее?
Xcode
Наконец, я попытался создать традиционный фреймворк xcode, начинающийся с нуля. xcode.
Мне удалось получить все для сборки, как и ожидалось (с минимальными изменениями), но этот требуемый путь к проекту xcode изменился и т. д. c.
Однако, это выравнивает иерархию заголовки и, следовательно, все относительные пути заголовков снова становятся бесполезными в потребляющем приложении / библиотеке.
Вопрос
- Может ах Библиотека C ++ только для eader будет скомпилирована в динамическую / stati c библиотеку для iOS?
- Если да, то какая система сборки и какие изменения конфигурации необходимы для моей сборки CMake / Bazel система?
- Любые другие предложения ??