繁体   English   中英

在 CMake 中静态链接到 macOS 框架

[英]Statically linking to macOS framework in CMake

我在我的 CMake 项目中使用名为CrashReporter第三方 macOS 框架,如下所示:

cmake_minimum_required(VERSION 3.15)

set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "Minimum OS X deployment version")

project(bug CXX)

find_package(CrashReporter REQUIRED)

add_executable(bug
  "${CMAKE_CURRENT_SOURCE_DIR}/main.mm"
)

set_target_properties(bug PROPERTIES LINK_FLAGS "-ObjC")
target_link_libraries(bug PUBLIC "-framework AppKit")

target_link_libraries(bug PRIVATE ${CRASHREPORTER_FRAMEWORK})

如果我将可执行文件复制到另一台机器,它会抱怨找不到该库。

是否可以在可执行文件中静态链接(而不是嵌入)框架?

框架和静态库是两个不同的东西。 您无法将框架的性质更改为静态链接。 但! 您的第三方提供商可能会为您提供一个安装包,其中包括一个框架、一个动态库和一个静态库,因此您可以选择要链接的那个。 或者,如果您的第三方库是开源的,您可以根据自己的喜好自行构建。 甚至有可能静态和动态库都在框架内提供,因为框架是一个类似于应用程序包的目录。 如果你安装了一个有多种口味的包,那么你可以设置这个变量来影响find_package结果:

CMAKE_FIND_FRAMEWORK(NEVER)

find_package()之前,CMake 将忽略框架并仅搜索 unix 库。

如果您知道有一个静态库以及它在哪里,您可以向target_link_libraries()命令提供静态库的全名:

target_link_libraries(bug PRIVATE ${CRASHREPORTER_STATIC_LIBRARY})

假设有一个CRASHREPORTER_STATIC_LIBRARY变量保存静态库的全名和路径(类似于“/path/to/crashreporting.a”)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM