cmake - CMake 中的可移植整体归档链接
问题描述
如果您想将静态库链接到共享库或可执行文件,同时保持所有符号可见(例如,以便稍后可以 dlopen 找到它们),在 Linux/BSD 上执行此操作的一种非便携式方法是使用标志-Wl,--whole-archive
. 在 macOS 上,等效标志是-Wl,-force_load,<library>
; 在 Windows 上显然是/WHOLEARCHIVE
.
在 CMake 中是否有可移植的方式来执行此操作?
我知道我可以使用target_link_libraries
. 我可以检测到操作系统。但是,由于 macOS 版本在与标志相同的字符串中包含库名称(无空格),我认为这与 CMake 对链接目标等的通常处理相混淆。我越是努力做到这一点,我就越需要向后弯腰才能做到这一点。
这甚至没有涉及更不寻常的编译器,如 Intel、PGI、Cray、IBM 等。这些可能不是人们通常处理的编译器,但在某些领域,基本上不可避免地需要处理这些。
有没有更好的选择?
解决方案
- flink.cmake会帮助你。
target_force_link_libraries(<target>
<PRIVATE|PUBLIC|INTERFACE> <item>...
[<PRIVATE|PUBLIC|INTERFACE> <item>...]...
)
推荐阅读
- php - How to enable date input and re format it ready for mysqli insert or select
- zsh - ZSH vcs_info are not updated if alias is used
- java - Dependent Nested For Loops in Bash
- xcode - 安装 pod 时遇到问题
- mongodb - Lookup on array of ids mongodb
- excel - 将行范围分配给变量
- javascript - JS中的订单表格
- mpi - 用于 MPI 安装的配置文件中的 -CC 选项
- javascript - 预期的 str 实例,找到了 BoundField (Django)
- ios - Safari 阻止 URL 请求凭据,因为它是跨域请求