在 OSX 上使用 CMake 将 Adobe 的 XMP 工具包构建为共享库的最简单方法是什么?
What's the easiest way to build Adobe's XMP toolkit as a shared library with CMake on OSX?
我正在整理一个应该是跨平台的小项目,用 CMake 构建,它需要 link 和 Adobe's XMP toolkit (libxmp).理想情况下,我希望 CMake 负责构建依赖项,包括 libxmp,一举成名。
不幸的是,XMP 工具包设计为在 OSX 上使用 XCode 构建,在 Linux 上使用 CMake 构建。 CMake 构建过程似乎无法在 OSX.
开箱即用
为了在 OSX 上使用 CMake 构建 XMP 工具包,我可以对它做的最小更改是什么?我是否应该一直修改它直到它起作用,或者这是一个 known/solved 问题?而且,更一般地说,我应该对自己的 CMakeLists.txt
文件添加哪些内容才能将此项目与我自己的项目集成?
今天我学到了一些东西,一些误解显然已经烟消云散。
满足第三方依赖要求后(expat 和 zlib;这只是将源压缩包中的文件解压到指定位置的问题),一旦我意识到 XCode 可以从命令行在这里利用,并且 XMP 自己的 "build system" 有足够的工具来完成我需要的一切。
简而言之,来自 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
.
下已经可以使用 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"
)
它当然可以被巧妙地处理,但这样做却不然 "just work"。
如果您使用的是 XMP Toolkit 2016.07(并且,在撰写本文时,没有更新的版本)并且有 Xcode 10+ & Mojave,您需要在安装之前安装几个补丁构建:
此外,如果您使用 expat 2.2.2 或更新版本:
- 在 expat 的
xmlparse.c
的顶部定义 HAVE_ARC4RANDOM_BUF
或 XML_POOR_ENTROPY
(因为 libxmp 构建系统不会这样做为你)
我正在整理一个应该是跨平台的小项目,用 CMake 构建,它需要 link 和 Adobe's XMP toolkit (libxmp).理想情况下,我希望 CMake 负责构建依赖项,包括 libxmp,一举成名。
不幸的是,XMP 工具包设计为在 OSX 上使用 XCode 构建,在 Linux 上使用 CMake 构建。 CMake 构建过程似乎无法在 OSX.
开箱即用为了在 OSX 上使用 CMake 构建 XMP 工具包,我可以对它做的最小更改是什么?我是否应该一直修改它直到它起作用,或者这是一个 known/solved 问题?而且,更一般地说,我应该对自己的 CMakeLists.txt
文件添加哪些内容才能将此项目与我自己的项目集成?
今天我学到了一些东西,一些误解显然已经烟消云散。
满足第三方依赖要求后(expat 和 zlib;这只是将源压缩包中的文件解压到指定位置的问题),一旦我意识到 XCode 可以从命令行在这里利用,并且 XMP 自己的 "build system" 有足够的工具来完成我需要的一切。
简而言之,来自 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"
)
它当然可以被巧妙地处理,但这样做却不然 "just work"。
如果您使用的是 XMP Toolkit 2016.07(并且,在撰写本文时,没有更新的版本)并且有 Xcode 10+ & Mojave,您需要在安装之前安装几个补丁构建:
此外,如果您使用 expat 2.2.2 或更新版本:
- 在 expat 的
xmlparse.c
的顶部定义HAVE_ARC4RANDOM_BUF
或XML_POOR_ENTROPY
(因为 libxmp 构建系统不会这样做为你)