使用 Bitcode 使 CMake 输出 Dylib 或 Framework

Getting CMake to output Dylib or Framework with Bitcode

在构建用于 mac/tv/iOS 项目的框架时,我决定构建一个框架并包含位码,以防万一。但是,我的输出框架不包含位码。

我可以看到每个源文件都被调用了 -fembed-bitcode,但是当我检查 .dylibotool -l library.dylib 时,没有 __LLVM 部分。切换到创建静态库,我可以看到 __LLVM 部分。

为什么 cmake 没有正确构建库?

为了正确构建动态库,无论是否在框架中,您都需要查看 cmake 输出的最后一行。在那里你会看到 clang 调用了所有 .o 文件,输出文件是 .dylib。此行缺失 -fembed-bitcode 并且在链接库时您需要再次传递 -fembed-bitcode 标志。

所以通过将标志添加到编译目标和库链接正确添加位码。

target_compile_options( library PUBLIC -fembed-bitcode )
target_link_options( library PUBLIC -fembed-bitcode )