CMake 中的便携式整体档案链接

Ell*_*ter 6 linker cmake

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

在 CMake 中有一种可移植的方法来做到这一点吗?

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

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

有没有更好的选择?

小智 3

target_force_link_libraries(<target>
    <PRIVATE|PUBLIC|INTERFACE> <item>...
    [<PRIVATE|PUBLIC|INTERFACE> <item>...]...
)
Run Code Online (Sandbox Code Playgroud)