如果要在保持所有符号可见的情况下将静态库链接到共享库或可执行文件中(例如,以便稍后稍后将其打开以找到它们),在Linux / BSD上执行此操作的一种非便携式方法是:使用标志-Wl,--whole-archive
。在macOS上,等效标志为-Wl,-force_load,<library>
;在Windows上显然是/WHOLEARCHIVE
。
在CMake中有一种便携式的方法吗?
我知道我可以使用target_link_libraries
添加链接器标志。我可以检测到操作系统。但是,由于此版本的macOS版本将库名称包含在与标志相同的字符串中(不带空格),因此我认为这与CMake对链接目标的常规处理等相混淆。我尝试使之兼容的程度越高,就越需要向后弯曲以使其实现。
这甚至还没有涉及到更多不寻常的编译器,例如Intel,PGI,Cray,IBM等。那些编译器可能不是人们通常使用的编译器,但是在某些领域,基本上是不可避免的需要处理这些编译器。 / p>
还有更好的选择吗?