首页 > 解决方案 > CMake 中的可移植整体归档链接

问题描述

如果您想将静态库链接到共享库或可执行文件,同时保持所有符号可见(例如,以便稍后可以 dlopen 找到它们),在 Linux/BSD 上执行此操作的一种非便携式方法是使用标志-Wl,--whole-archive. 在 macOS 上,等效标志是-Wl,-force_load,<library>; 在 Windows 上显然是/WHOLEARCHIVE.

在 CMake 中是否有可移植的方式来执行此操作?

我知道我可以使用target_link_libraries. 我可以检测到操作系统。但是,由于 macOS 版本在与标志相同的字符串中包含库名称(无空格),我认为这与 CMake 对链接目标等的通常处理相混淆。我越是努力做到这一点,我就越需要向后弯腰才能做到这一点。

这甚至没有涉及更不寻常的编译器,如 Intel、PGI、Cray、IBM 等。这些可能不是人们通常处理的编译器,但在某些领域,基本上不可避免地需要处理这些。

有没有更好的选择?

标签: cmakelinker

解决方案


target_force_link_libraries(<target>
    <PRIVATE|PUBLIC|INTERFACE> <item>...
    [<PRIVATE|PUBLIC|INTERFACE> <item>...]...
)

推荐阅读