在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
What's the easiest way to build Adobe's XMP toolkit as a shared library with CMake on OSX?
我正在整理一个小项目,它应该是跨平台的,用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,则需要在构建之前将一些补丁放在一起:
- Xcode 版本检测修复
- 标准翻译配置修复
- 映射/对类型别名修复
此外,如果您使用 expat 2.2.2 或更高版本:
- 在expat
xmlparse.c
的顶部定义HAVE_ARC4RANDOM_BUF
或XML_POOR_ENTROPY
(因为 libxmp 构建系统不会为您执行此操作(
相关文章:
- 为什么构建目录中新构建的共享库与安装目录中的副本具有不同的依赖项集?
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- 用于构建 cuda .so 文件(共享库)的生成文件
- 为 Python 构建共享库C++时出现分段错误
- 如何使用 CMake 在 android 构建上编译和共享两个 c++ 库
- 如何在 Linux 中构建共享库时使未定义引用的链接器失败
- 如何使用 cmake 在代码中包含、构建和调试共享库 (.so)?
- 如何防止 CMake 在构建时(而不是在安装时)为共享库创建符号链接?
- 从单个.cpp构建共享对象
- 使用 pybind11 构建库,链接其他共享库
- 从静态库构建共享库
- 使用 Makefile 构建共享库
- 我可以在Embarcadero C 建造者中为Android(*.so)构建共享库
- 构建本身是共享_ptr类型的模板容器
- 尝试与从 CUDA 对象构建的共享库链接时未定义的符号
- setuptools:从C++代码构建共享库,然后构建链接到共享库的 Cython 包装器
- 构建共享对象 - 使用 Ninja 编译适用于 OSX 和 Windows 上的 Ubuntu Crush
- 使用boost :: python手动构建共享对象
- 在我的CMake项目中使用静态构建而不是OpenCV的共享构建
- Qt保持构建共享构建无论我选择什么选项