Какой самый простой способ создать инструментарий Adobe XMP в качестве общей библиотеки с CMake на OSX? - PullRequest
0 голосов
/ 18 октября 2018

Я собираю небольшой проект, который должен быть кроссплатформенным, построенным на CMake, и он должен быть связан с инструментарием Adobe XMP ( libxmp ).В идеале я хотел бы, чтобы CMake отвечал за построение зависимостей, включая libxmp , одним махом.

К сожалению, инструментарий XMP разработан для сборки с XCode на OSX и CMake наLinux.Процесс сборки CMake, по-видимому, не работает "из коробки" в OSX.

Какое минимальное изменение я могу внести в инструментарий XMP, чтобы его можно было собирать с CMake в OSX?Должен ли я просто продолжать взламывать его, пока он не сработает, или это известная / решенная проблема?И, в более общем плане, какие дополнения я должен внести в свой собственный файл CMakeLists.txt, чтобы интегрировать этот проект с моим собственным?

1 Ответ

0 голосов
/ 19 октября 2018

Сегодня я узнал несколько вещей, и некоторые неправильные представления, по-видимому, испарились.

После выполнения требований к зависимостям сторонних производителей (expat и zlib; это всего лишь вопрос извлечения файлов из исходных архивов вназначенного местоположения), это было довольно легко, когда я понял, что XCode можно использовать здесь из командной строки, и что собственная «система сборки» XMP имеет достаточно инструментов, чтобы делать все, что мне нужно.

Короче говоря, из build directory:

./cmake.command 64 Dynamic WarningAsError ToolchainLLVM.cmake
cd xcode/dynamic/intel_64
xcodebuild -scheme ALL_BUILD build

Затем файлы инфраструктуры находятся в public/libraries/macintosh/intel_64/Debug, а включения уже доступны в public/include.

После некоторой либеральной символической ссылки в моем собственномCMakeLists.txt проекта - это просто вопрос:

target_compile_definitions(myProject
    PUBLIC
        MAC_ENV
)

target_include_directories(
    myProject
    PRIVATE
        include/libxmp
)

# Add build dir to path for finding frameworks (libmxp)
set_target_properties(
    myProject 
    PROPERTIES
        LINK_FLAGS "-Wl,-F${CMAKE_BINARY_DIR}/Frameworks"
)

target_link_libraries(
    myProject
    PRIVATE
        catch
        "-framework XMPCore"
        "-framework XMPFiles"
)

Конечно, это может быть утончено, но в противном случае это просто "работает".


Если вы используете XMP Toolkit2016.07 (и, на момент написания, более новой версии нет) и Xcode 10+ и Mojave, вам нужно собрать несколько патчей перед сборкой:

  1. Исправление определения версии Xcode
  2. Исправление конфигурации stdlib
  3. Исправления псевдонимов типа карты / пары

Кроме того, если вы используете expat 2.2.2 или новее:

  1. Определите HAVE_ARC4RANDOM_BUF или XML_POOR_ENTROPY в верхней части expat 's xmlparse.c (поскольку система сборки libxmp не сделает этого за вас)
...