[英]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.