在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?

What's the easiest way to build Adobe's XMP toolkit as a shared library with CMake on OSX?

本文关键字:共享 构建 最简单 是什么 方法 工具包 XMP OSX CMake Adobe      更新时间:2023-10-16

我正在整理一个小项目,它应该是跨平台的,用CMake构建的,它需要与Adobe的XMP工具包(libxmp(链接。理想情况下,我希望 CMake 负责一举构建依赖项,包括libxmp

不幸的是,XMP工具包被设计为在OSX上使用XCode和Linux上的CMake构建。CMake 构建过程在 OSX 上似乎不是开箱即用的。

我可以对 XMP 工具包进行哪些最小更改,以使其在 OSX 上使用 CMake 进行构建?我应该继续破解它直到它起作用,还是这是一个已知/已解决的问题?而且,更一般地说,我应该对自己的CMakeLists.txt文件进行哪些添加才能将此项目与我自己的项目集成?

我今天学到了一些东西,一些误解显然已经消失了。

在满足第三方依赖要求(expat 和 zlib;这只是将文件从源码包中提取到指定位置的问题(之后,一旦我意识到 XCode 可以从命令行在这里利用,并且 XMP 自己的"构建系统"有足够的工具来完成我需要的一切,这很容易。

简而言之,从build目录中:

./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 Toolkit 2016.07(在撰写本文时,没有更新的版本(并且拥有Xcode 10+和Mojave,则需要在构建之前将一些补丁放在一起:

  1. Xcode 版本检测修复
  2. 标准翻译配置修复
  3. 映射/对类型别名修复

此外,如果您使用 expat 2.2.2 或更高版本:

  1. expatxmlparse.c的顶部定义HAVE_ARC4RANDOM_BUFXML_POOR_ENTROPY(因为 libxmp 构建系统不会为您执行此操作(