我正在整理一个应该是跨平台的小项目,使用 CMake 构建,并且需要与 Adobe's XMP toolkit 链接。 (libxmp)。理想情况下,我希望 CMake 负责一次性构建依赖项,包括 libxmp。
不幸的是,XMP 工具包设计为使用 OSX 上的 XCode 和 Linux 上的 CMake 构建。 CMake 构建过程似乎无法在 OSX 上开箱即用。
为了在 OSX 上使用 CMake 进行构建,我可以对 XMP 工具包进行最小的更改是什么?我应该继续努力直到它起作用,还是这是一个已知/已解决的问题?更一般地说,我应该在自己的 CMakeLists.txt
文件中添加哪些内容才能将此项目与我自己的项目集成?
最佳答案
今天我学到了一些东西,一些误解显然已经消失了。
在满足第三方依赖项要求(expat 和 zlib;这只是将文件从源 tarball 提取到指定位置的问题)后,一旦我意识到可以从命令行利用 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
下可用。
经过一些自由的符号链接(symbolic link)后,在我自己的项目的 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,则在构建之前您需要整理一些补丁:
此外,如果您使用 expat 2.2.2 或更高版本:
- 在 expat 的
xmlparse.c
顶部定义HAVE_ARC4RANDOM_BUF
或XML_POOR_ENTROPY
(因为 libxmp 构建系统不会为您执行此操作)
关于c++ - 在 OSX 上使用 CMake 将 Adobe 的 XMP 工具包构建为共享库的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52879637/